假设您有一个带有视图参数的页面,例如/widgets?widgetId=1
<f:metadata>
<f:viewParam
name="widgetId"
value="#{widgetIdMB.widgetId}"
converter="#{widgetIDConverter}" />
</f:metadata>
所以,少说你的转换器会抛出一个ConverterException
,因为有人试图导航到/widgets?widgetId=1000000
,数据库中不存在。当这种情况发生时,有没有办法将用户发送到 404 页面?
EDIT:
我使用转换器来转换该值。如果无法在数据库中查找该值,转换器将返回 null,而不是抛出 ConverterException。
然后我使用验证器。验证器将抛出验证异常,但在调用omnifaces实用程序类后不会抛出:Faces.responseSendError(404, "Not Found");
这似乎是关注点分离的最佳实现。
Use ExternalContext#responseSendError() in the Converter
当条件满足时。
context.getExternalContext().responseSendError(404, message);
context.responseComplete();
return null;
别忘了打电话FacesContext#responseComplete()
之后,由于某种原因,这并没有隐式完成,与ExternalContext#redirect()
。否则,JSF 会将当前页面附加到响应末尾,或者抛出一个IllegalStateException
当它已经承诺时。
而不是神奇的数字404
你也可以使用HttpServletResponse.SC_NOT_FOUND.
context.getExternalContext().responseSendError(HttpServletResponse.SC_NOT_FOUND, message);
context.responseComplete();
return null;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)