我能够成功地使用我的应用程序中的模板:
<ui:decorate template="/WEB-INF/templates/mytemplate.xhtml">
我也可以将模板移动到JAR的/meta-inf/templates/mytemplate.xhtml并使其工作:
<ui:decorate template="/templates/mytemplate.xhtml">
我实际上想把这个文件放到文件系统(或数据库)上.我怎样才能做到这一点?我发现很多与com.sun.facelets.impl.DefaultResourceResolver相关的东西,但我认为这实际上与覆盖模板的服务无关.它不是尝试解析URL,它只是试图以某种方式在类路径上获取文件.
解决方法
如果您已经使用JSF 2.2,则可以通过提供自定义
ResourceHandler
来执行此操作,其中您在
createViewResource()
中返回所需的视图资源.
public class FaceletsResourceHandler extends ResourceHandlerWrapper { private ResourceHandler wrapped; public FaceletsResourceHandler(ResourceHandler wrapped) { this.wrapped = wrapped; } @Override public ViewResource createViewResource(FacesContext context,final String name) { ViewResource resource = super.createViewResource(context,name); if (resource == null) { resource = new ViewResource() { @Override public URL getURL() { try { return new File("/some/base/path",name).toURI().toURL(); } catch (MalformedURLException e) { throw new FacesException(e); } } }; } return resource; } @Override public ResourceHandler getWrapped() { return wrapped; } }
<application> <resource-handler>com.example.FaceletsResourceHandler</resource-handler> </application>
或者如果你还没有使用JSF 2.2,那么请使用ResourceResolver
.
public class FaceletsResourceResolver extends ResourceResolver { private ResourceResolver parent; public FaceletsResourceResolver(ResourceResolver parent) { this.parent = parent; } @Override public URL resolveUrl(String path) { URL url = parent.resolveUrl(path); // Resolves from WAR. if (url == null) { try { url = new File("/some/base/path",path).toURI().toURL(); } catch (MalformedURLException e) { throw new FacesException(e); } } return url; } }
哪个在web.xml中注册如下:
<context-param> <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name> <param-value>com.example.FaceletsResourceResolver</param-value> </context-param>
无论如何,为了从数据库提供资源,您可以将它们保存/缓存在(临时)磁盘文件系统上,这样您就可以通过File提供URL,或者发明自定义协议,例如db:/ /并提供自定义URLStreamHandlerFactory
和URLStreamHandler
实现,以执行来自DB的实际流式传输作业.你可以在Registering and using a custom java.net.URL protocol找到一个启动示例.
原文地址:https://www.jb51.cc/mssql/77350.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。