如果f:viewParam / converter返回null,如何将一个人发送到404页面



假设您有一个带有视图参数的页面,如/widgets?widgetId=1

    <f:metadata>
        <f:viewParam
            name="widgetId"
            value="#{widgetIdMB.widgetId}"
            converter="#{widgetIDConverter}" />
    </f:metadata>

所以,更少说你的转换器抛出ConverterException,因为有人试图导航到/widgets?widgetId=1000000,这在数据库中不存在。当这种情况发生时,是否有办法将用户发送到404页面?

编辑:

我使用了一个转换器来转换值。如果该值无法在数据库中查找到,则转换器返回null,而不是抛出ConverterException。

然后我使用验证器。验证器将抛出一个validationexception,但不会在调用omnifaces实用程序类之后抛出:Faces.responseSendError(404, "Not Found");

这似乎是关注点分离的最佳实现。

Converter中满足条件时使用ExternalContext#responseSendError()

context.getExternalContext().responseSendError(404, message);
context.responseComplete();
return null;

不要忘记在之后调用FacesContext#responseComplete(),由于某种原因,这不是隐式地完成的,与ExternalContext#redirect()相反。否则,JSF将把当前页面附加到响应的末尾,或者在已经提交时抛出一个IllegalStateException

你也可以用HttpServletResponse.SC_NOT_FOUND代替神奇的数字404

context.getExternalContext().responseSendError(HttpServletResponse.SC_NOT_FOUND, message);
context.responseComplete();
return null;

相关内容

  • 没有找到相关文章

最新更新