yma*_*ros 13 java jsf facelets java-ee jsf-2
我正试图在多次战争之间共享一个错误页面(error.xhtml).它们都是一个大耳朵应用程序,并且都使用一个常见的jar库,我想把它放在这里.
错误页面应使用web.xml或更好的web-fragment.xml,并将声明为标准java ee错误页面.
实际EAR结构:
EAR
EJB1
EJB2
WAR1 (using CommonWeb.jar)
WAR2 (using CommonWeb.jar)
WAR3 (using CommonWeb.jar)
Run Code Online (Sandbox Code Playgroud)
只是将错误页面放在META-INF/resources下面将不起作用,因为它不是资源.
我想尽可能少地配置每个war文件.
我正在使用Glassfish 3.1,但我希望尽可能使用Java EE 6标准.
Bal*_*usC 21
您需要创建一个自定义ResourceResolver
,它从类路径中解析资源,将其放在公共JAR文件中,然后web-fragment.xml
在JAR中(或在web.xml
WAR中)声明它.
开球示例:
package com.example;
import java.net.URL;
import javax.faces.view.facelets.ResourceResolver;
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;
}
}
Run Code Online (Sandbox Code Playgroud)
与in web-fragment.xml
或web.xml
<context-param>
<param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
<param-value>com.example.FaceletsResourceResolver</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5090 次 |
最近记录: |