Otá*_*cia 4 jsf facelets composition
我有一个使用组合的应用程序(用于页面模板).但我们认为创建一个Web应用程序(战争)来托管所有应用程序在同一主机中共享的所有模板.
如何从其他上下文中包含模板?这时我使用从http请求导入.但这听起来很糟糕.
<ui:composition template="http://localhost:8080/templates/layout/foo.xhtml">
我正在使用JBoss Seam 2.x和JSF 1.
Bal*_*usC 10
请注意,在JSF 2.x Facelets中要做的不同,请参阅此答案以获取详细信息.
使用自定义Facelets资源解析器可以实现这一点.我不会通过HTTP解决它们,而只是从类路径解决它们.只需将共享模板打包在例如/META-INF/resourcesJAR文件的文件夹中,然后将解析器类放在同一个JAR中.最后在所有webapps中分发这个JAR.
package com.example;
import java.net.URL;
import com.sun.facelets.impl.DefaultResourceResolver;
public class FaceletsResourceResolver extends DefaultResourceResolver {
private String basePath;
public FaceletsResourceResolver() {
this.basePath = "/META-INF/resources"; // TODO: Make configureable?
}
public URL resolveUrl(String path) {
URL url = super.resolveUrl(path); // Resolves from WAR.
if (url == null) {
url = getClass().getResource(basePath + path); // Resolves from JAR.
}
return url;
}
}
Run Code Online (Sandbox Code Playgroud)
注册web.xml如下:
<context-param>
<param-name>facelets.RESOURCE_RESOLVER</param-name>
<param-value>com.example.FaceletsResourceResolver</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6269 次 |
| 最近记录: |