我不想使用 DB 来存储“可编辑”部分或将它们动态插入到 Facelets 模板中。
那么您唯一可行的选择是将它们保存在本地磁盘文件系统中。请注意,您可以也不应该将它们保存在 WAR 的 deploy 文件夹中,而是保存在 WAR 之外。否则,在重新部署甚至简单的服务器重新启动期间,所有更改都会丢失。更重要的是,当服务器配置为在内存而不是磁盘中扩展 WAR 时,您将无法向其写入文件。
在 WAR 之外保存文件很容易。FileOutputStream
只需在此文件上写入 a :
new File("/some/base/path", filename);
让 Facelets 从外部 WAR 解析资源需要自定义ResourceResolver
:
public class MyResourceResolver extends ResourceResolver {
private ResourceResolver parent;
public MyResourceResolver(ResourceResolver parent) {
this.parent = parent;
}
@Override
public URL resolveUrl(String path) {
URL url = parent.resolveUrl(path); // Resolves from WAR.
if (url == null) {
url = new File("/some/base/path", path).toURI().toURL();
}
return url;
}
}
其中需要注册如下web.xml
。
<context-param>
<param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
<param-value>com.example.MyResourceResolver</param-value>
</context-param>