我了解您的问题基本上可以归结为 如何在JAR中包含Facelets视图?
您可以通过
ResourceResolver在JAR中放置一个自定义来实现。
public class FaceletsResourceResolver extends ResourceResolver { private ResourceResolver parent; private String basePath; public FaceletsResourceResolver(ResourceResolver parent) { this.parent = parent; this.basePath = "/meta-INF/resources"; // TODO: Make configureable? } @Override public URL resolveUrl(String path) { URL url = parent.resolveUrl(path); // Resolves from WAR. if (url == null) { url = getClass().getResource(basePath + path); // Resolves from JAR. } return url; }}在webapp
web.xml中进行如下配置:
<context-param> <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name> <param-value>com.example.FaceletsResourceResolver</param-value></context-param>
想象一下,你已经一
/meta-INF/resources/foo/bar.xhtml中
random.jar,那么你可以只包括它的常规方式
<ui:include src="/foo/bar.xhtml" />
甚至是动态的
<ui:include src="#{bean.path}" />注意:由于Servlet 3.0和更高版本的JBoss / JSF 2.0版本,
ResourceResolver如果将文件保存在文件
/meta-INF/resources夹中,则不需要整个方法。上面
ResourceResolver的仅在Servlet 2.5或更早的JBoss /
JSF版本中是强制性的,因为它们在
meta-INF资源解析中存在错误。



