gpt4 book ai didi

jsf - 如果 f :viewParam/converter returns null? 如何将一个人发送到 404 页面

转载 作者:行者123 更新时间:2023-12-02 22:08:09 26 4
gpt4 key购买 nike

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

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

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

编辑:

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

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

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

最佳答案

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

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

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

您还可以使用 HttpServletResponse.SC_NOT_FOUND 而不是魔数(Magic Number) 404 .

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

关于jsf - 如果 f :viewParam/converter returns null? 如何将一个人发送到 404 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15796497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com