首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从FacesContext隐藏JSP

从FacesContext隐藏JSP
EN

Stack Overflow用户
提问于 2011-10-24 12:41:42
回答 3查看 450关注 0票数 1

我有一个JSF应用程序,它的Servlet Filter配置为urlPattern of /faces/*。我希望将JSP隐藏在faces上下文中,这样它就不会通过Servlet Filter。因此,我将其保存在项目的WebContent文件夹下,作为WebContent/Error.jsp,并在web.xml中声明如下所示

代码语言:javascript
复制
<error-page>
    <exception-type>java.lang.NullPointerException</exception-type>
    <location>/Error.jsp</location>
</error-page>

但是我的Error.jsp从来没有被捡起来。相反,我看到404页没有找到错误。

更清楚的是,我希望我的Error.jsp页面网址是:

http://localhost:8080/myappname/Error.jsp

但只有通过以下途径才能达到:

http://localhost:8080/myappname/faces/Error.jsp

当我在view-id中声明任何faces-config.xml时,情况也是如此。如果我想对faces上下文隐藏错误JSP,我应该把它保存在哪里?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-24 14:46:49

根据到目前为止所提供的信息,它看起来应该工作得很好。过滤器上没有<dispatcher>ERROR</dispatcher>,因此无论何时抛出NPE,都不应该调用过滤器。

显然,NPE陷入了另一个异常,因为它被抛到了一个不符合逻辑的地方,比如bean的构造函数,而不是普通的bean操作方法。在这种情况下,JSF会将其重新抛出为ManagedBeanCreationException。容器将得到它而不是NPE,因此无法定位错误页面。在容器的默认HTTP 500错误页中,应读取堆栈跟踪的最顶层异常,以确定要定义错误页的正确异常。

请记住,像NPEs这样的运行时异常是开发人员错误(bug!),而不是生产错误,它们应该尽快修复。我个人只会为这类错误使用一个全局HTTP 500错误页面:

代码语言:javascript
复制
<error-page>
    <status-code>500<status-code>
    <location>/errors/generic.jsp</location>
</error-page>

对于更具体的实际生产异常,您可以始终声明一个更具体的错误页面:

代码语言:javascript
复制
<error-page>
    <exception-type>com.example.YourDatabaseAccessException</exception-type>
    <location>/errors/database.jsp</location>
</error-page>
<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/errors/sessionexpired.jsp</location>
</error-page>
票数 0
EN

Stack Overflow用户

发布于 2011-10-24 13:03:33

如果您在web.xml中定义了一个过滤器并进行了去核,那么所有的请求都将通过该过滤器,除非您定义了过滤器映射。

我认为您可以在您的web.xml中定义一个过滤器映射如下:

代码语言:javascript
复制
<filter> 
<filter-name>URLFilter</filter-name> 
<filter-class>the filter class in your source code</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>URLFilter</filter-name> 
<url-pattern>/some pages</url-pattern>//skip error.jsp here
</filter-mapping> 

这不是测试,而是一个灵感。编辑:您可以从Oracle站点中了解更多信息

票数 0
EN

Stack Overflow用户

发布于 2011-10-24 13:43:35

对我来说,这听起来不像是滤镜和这个问题有任何关系。你能用完全禁用的过滤器到达http://localhost:8080/myappname/Error.jsp吗?如果没有,那么Error.jsp文件本身可能有一些问题吗?

很难说,如果没有看到代码本身。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7875780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档