我的错误页面未显示senderror方法发送的错误消息。错误页面:
<h:head>
<title>Error Page</title>
</h:head>
<h:body>
<p>Error : #{requestScope['javax.servlet.error.message']}</p>
<h:outputText value="#{requestScope['javax.servlet.error.message']}" />
</h:body>
我从过滤器
发送错误((HttpServletResponse) response).sendError(-1, "You do not have a active session to access this page.");
呈现正确的页面,但我只能看到输出为:
Error :
但是不会打印来自javax.servlet.error.message的错误消息。
答案 0 :(得分:1)
这表明在错误页面请求中没有调用FacesServlet
,而负责解析该XHTML文件中的所有JSF标记和EL表达式并生成HTML输出。要确认这一点,请在浏览器中右键单击错误页面并执行查看源;你不应该在那里看到任何JSF / EL的东西,而是纯JSF生成的HTML输出。
您需要确保<error-page><location>
中的web.xml
与<url-pattern>
中定义的FacesServlet
的{{1}}相匹配。例如,如果您将其映射到web.xml
的网址格式,则错误页面位置必须与/faces/*
类似。否则,请将/faces/error.xhtml
映射更改为FacesServlet
,这样您就不必担心虚拟URL。
也就是说,*.xhtml
绝对不是一个有效的HTTP status code。 4xx范围内的东西更适合这个。例如。 -1
或400
取决于您的身份验证方式。