在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
,具体取决于你如何进行身份验证。