任何人都可以澄清我们如何在一般情况下使用,或者在现实世界中使用这个代码片段?
<f:metadata>
<f:viewParam id="id" value="#{bean.id}" />
<f:viewAction action="#{bean.init}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud) 假设你有一个带有视图参数的页面,比如 /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");
这似乎是关注点分离的最佳实现.