gpt4 book ai didi

jsf - ViewExpiredException 错误页面未显示

转载 作者:行者123 更新时间:2023-12-02 01:52:46 25 4
gpt4 key购买 nike

我让一些带有表单的选项卡打开,当我按下命令按钮时( session 过期一段时间后)我收到一个 java 脚本警报说:

serverError: class javax.faces.application.ViewExpiredException viewId:/register.xhtml - View /register.xhtml could not be restored.



在 firefox 上(本地的 glassfish 4)

我已经添加了 :
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/index.xhtml?faces-redirect=true</location>
</error-page>

在我的 web.xml但我没有被重定向到我的索引。这是为什么 ?

编辑:示例按钮
<h:commandButton value="Register" action="#{userController.register}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>

UserController 是 ViewScoped

最佳答案

如果您查看 JSF-2.2 spec 的第 13.3.6.3 和 13.3.6.4 节,这是预期的行为。 ,至少如果你有

<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>

在您的 web.xml (它会默默地忽略生产模式下的错误)。当您单击该按钮并接收到时,JSF 客户端代码会发送一个 AJAX 请求
<error>
<error-name>...</error-name>
<error-message>...</error-message>
</error>

与您的 ViewExpiredException在回应中。然后预期客户端代码对该错误信息使用react。使用 onerror 注册一个函数(在 f:ajax 标签上)或 addOnError (在 jsf.ajax 对象上)自己处理错误。

由于很多人希望服务器在此类问题上指导客户端,因此omnifaces 包括 FullAjaxExceptionHandler这基本上会重置您的响应并发送您指定的错误页面。

另见:

Session timeout and ViewExpiredException handling on JSF/PrimeFaces ajax request

关于jsf - ViewExpiredException 错误页面未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21800128/

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