我不想用DB來存儲「可編輯」的部分或將它們dynamiclly插入到Facelets模板。
然後你唯一可行的選擇是將它們保存在本地磁盤文件系統中。請注意,您可以也不應將它們保存在WAR的deploy文件夾中,但不在WAR之外。否則,在重新部署或甚至簡單的服務器重新啓動期間,所有更改都會丟失。更甚者,當服務器配置爲在內存中而不是在磁盤上擴展WAR時,您將無法向其寫入文件。
將文件保存到WAR之外很容易。只要寫對這個文件FileOutputStream
:
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>
對我即將保存的內容進行一些JAVA XML驗證是否明智? (愚蠢的問題,我想是的)。謝謝 – Dimman
我會通過調用'ViewDeclarationLanguage#buildView()'來利用Facelets編譯器。 – BalusC