在xhtml页面上显示sendError消息

问题描述:

我的错误页面没有显示senderror方法发送的错误消息。错误页面:在xhtml页面上显示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不被打印。

这表明FacesServlet没有在错误页面请求上被调用,而这是负责解析该XHTML文件中的所有JSF标签和EL表达式并生成HTML输出的人。要确认这一点,请右键单击浏览器中的错误页面并执行查看源代码;你不应该在那里看到任何JSF/EL的东西,而是纯粹的JSF生成的HTML输出。

你需要确保在web.xml<error-page><location>匹配FacesServlet<url-pattern>作为web.xml定义。例如,如果您将其映射到/faces/*的URL模式,则错误页面位置必须与/faces/error.xhtml相似。否则,请将FacesServlet映射更改为*.xhtml,这样您就不必担心虚拟URL。

也就是说,-1绝对不是一个有效的HTTP status code开始。在4xx范围内的东西更适合于此。例如。 400或者401,具体取决于你如何进行身份验证。