jsf – 从外部文件系统或数据库获取Facelets模板/文件
|
我能够成功地使用我的应用程序中的模板: <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;
}
}
哪个在faces-config.xml中注册如下: <application>
<resource-handler>com.example.FaceletsResourceHandler</resource-handler>
</application>
或者如果你还没有使用JSF 2.2,那么请使用 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:/ /并提供自定义 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
