Jon*_*her 2 jsf converter http-status-code-404 jsf-2
假设你有一个带有视图参数的页面,比如 /widgets?widgetId=1
<f:metadata>
<f:viewParam
name="widgetId"
value="#{widgetIdMB.widgetId}"
converter="#{widgetIDConverter}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
所以,少说你的转换器抛出一个ConverterException,因为有人试图导航到 /widgets?widgetId=1000000,这在数据库中是不存在的.有没有办法在发生这种情况时将此人发送到404页面?
编辑:
我使用转换器来转换值.如果无法在数据库中查找该值,则转换器将返回null,而不是抛出ConverterException.
然后我使用验证器.验证器将抛出validationexception,但在调用omnifaces实用程序类之后不会:Faces.responseSendError(404, "Not Found");
这似乎是关注点分离的最佳实现.
使用ExternalContext#responseSendError()中Converter,当条件满足.
context.getExternalContext().responseSendError(404, message);
context.responseComplete();
return null;
Run Code Online (Sandbox Code Playgroud)
不要忘记FacesContext#responseComplete()事后打电话,这并不是出于某种原因而暗中完成的,与此相反ExternalContext#redirect().否则,JSF会将当前页面追加到响应结束,或者IllegalStateException在它已经提交时抛出.
404您也可以使用而不是幻数HttpServletResponse.SC_NOT_FOUND.
context.getExternalContext().responseSendError(HttpServletResponse.SC_NOT_FOUND, message);
context.responseComplete();
return null;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
956 次 |
| 最近记录: |