我正在尝试尽可能简单地在“分支” JSF2应用程序中处理错误,该应用程序具有用于移动设备和台式机的单独的模板以及XHTML页面路径。
目前主要的servlet映射(可能需要修改)
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
<url-pattern>/javax.faces.resource/*</url-pattern>
</servlet-mapping>
在我的情况下,此方法可以很好地处理桌面错误:
<error-page>
<error-code>404</error-code>
<location>/faces/webpages/filenotfound.xhtml</location>
</error-page>
<error-page>
<exception-type>java.io.FileNotFoundException</exception-type>
<location>/faces/webpages/filenotfound.xhtml</location>
</error-page>
但是考虑到分叉的页面和模板集,我也想拥有
<error-page>
<error-code>404</error-code>
<location>/faces/mpages/filenotfound.xhtml</location>
</error-page>
<error-page>
<exception-type>java.io.FileNotFoundException</exception-type>
<location>/faces/mpages/filenotfound.xhtml</location>
</error-page>
是否有一种方法可以直接在web.xml
中执行此操作,或者使用与上下文根目录无关的路径,或者通过将一些配置嵌套在定义用于不同场景的路径的块中?还是使用faces-config.xml
并创建可与确切的XHTML文件位置匹配的自定义结果?
答案 0 :(得分:0)
好吧,我没有得到回应(也没有想到我会得到)。对于它的价值,这是我为了获得期望的结果所做的事情。
404.jsp
页面404.xhtml
String pageRoot = MobileChecker.isMobile( request ) ? "mpages" : "webpages";
if(!response.isCommitted()) {
response.sendRedirect(request.getContextPath() + "/faces/" + pageRoot + "/404.xhtml");
}
不幸的是,“ MobileChecker
”部分是我们代码库的旧部分,但是要尽一切努力检测出该设备应该被视为“移动设备”(UA嗅探可能是其中的一部分,但是从客户端传递的功能检测可能会更好)。我们已经在服务器级别进行了此设置,因此对应用程序根目录的请求已相应地重定向到/webpages
或/mpages
路径。
到目前为止,这种方法总体上似乎可行。