我有一个使用Mojarra 2.2.9的JSF应用程序,并在WebSphere 8.5.5.4上部署在集群环境中并javax.faces.STATE_SAVING_METHOD设置为client.
即使我的所有应用程序bean都是请求作用域,有时候当用户会话有效并且用户在他获得的页面上进行发布请求时ViewExpiredException.可能导致此问题的原因以及如何解决?将改变javax.faces.STATE_SAVING_METHOD以server解决呢?如果是这样,这对内存有什么影响?
此外,这是否与集群环境有关,也许Websphere上有一些缺少配置可以解决问题?
当我有javax.faces.application.ViewExpiredException时,我想将用户发送到登录页面.
web.xml中
...
<context-param>
<param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
<param-value>true</param-value>
</context-param>
...
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/errors/sessionExpired.jsf</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
sessionExpired.jsf
....
<c:redirect url="/index.jsf" />
Run Code Online (Sandbox Code Playgroud)
但enableRestoreView11Compatibility是JSF 1.1中使用的方法,什么是JSF 1.2的解决方案?
我有一系列相互建立的注册页面.当用户会话到期时,我有一个监听器,可以清理服务器上的所有内容并且运行良好.但是,如果用户尝试做任何其他事情,我只想将它们重定向回系列的第一页.但是,我的过滤器似乎无法正常工作.我一直得到javax.faces.application.ViewExpiredException
处理此次泄露的最佳做法是什么?我不能真正处理web.xml,因为它太全局了.另外,Error页面是从一些JSF代码呈现的 - 似乎我需要捕获这是发生在使用PhaseListener,所以异常不会发生在第一位,但我找不到一个好的模型如何做到这一点.有任何想法吗?
我有一个不受保护的JSF页面j_security_check.我执行以下步骤:
Firebug显示a ViewExpiredException正如预期的那样被提升.
帖子:
Run Code Online (Sandbox Code Playgroud)javax.faces.ViewState=8887124636062606698:-1513851009188353364响应:
Run Code Online (Sandbox Code Playgroud)<partial-response> <error> <error-name>class javax.faces.application.ViewExpiredException</error-name> <error-message>viewId:/viewer.xhtml - View /viewer.xhtml could not be restored.</error-message> </error> </partial-response>
但是,一旦我将页面配置为受保护j_security_check并执行上面列出的相同步骤,奇怪的是(对我而言)ViewExpiredException不再引发.相反,响应只是一种新的视图状态.
帖子:
Run Code Online (Sandbox Code Playgroud)javax.faces.ViewState=-4873187770744721574:8069938124611303615响应:
Run Code Online (Sandbox Code Playgroud)<partial-response> <changes> <update id="javax.faces.ViewState">234065619769382809:-4498953143834600826</update> </changes> </partial-response>
有人可以帮我解决这个问题吗?我希望它引发异常,以便我可以处理该异常并显示错误页面.现在它只是响应一个新的ViewState,我的页面卡住了没有任何视觉反馈.
无论我做什么,我都会得到javax.faces.application.ViewExpiredException:viewId.我知道如何处理异常(如果我收到错误,再次重定向到主页),问题是我从commandButton调用的任何操作都没有执行.
基本上我有一个带有动作的commandButton的简单视图..我按它并得到viewExpiredException或如果我处理错误,我没有得到错误消息但仍然我的commandButton不起作用.
我尝试添加这个:
<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>client</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我不知道发生了什么事......
这是我的看法:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
lang="es">
<div class="container">
<h:form id="principal">
<h1>Sistema de carga de publicaciones</h1>
<h:outputText value="Ingrese el año por el que desea buscar publicaciones" />
<h:inputText
id="year"
value="#{publicaciones.año}" />
<h:commandButton
style="display:block"
id="boton-codigo-facultad"
value="Buscar"
type="submit">
</h:commandButton>
<h:panelGroup id="output">
<h:outputText
style="display:block"
value="Total publicaciones en la DB:#{publicaciones.totalPublicacionesDB}" />
<h:outputText
style="display:block"
value="Publicaciones obtenidas desde el WS:" />
<h:outputText
style="display:block"
value="Publicaciones nuevas:" />
</h:panelGroup> …Run Code Online (Sandbox Code Playgroud) 我们最近将主要平台从jsf 1.2升级到2.0.升级后,我们每小时都会收到几个ViewExpiredException错误.通过阅读该主题,似乎这是会话到期时的预期异常,但是我们已经审查了访问日志,即使请求在某些情况下仅相隔5分钟,我们也会收到这些异常.
我的问题如下:
1)除会话到期外,还有哪些其他条件可能导致ViewExpiredException?
2)我们正在记录的异常没有包含导致异常的确切条件的详细信息(缺少会话,损坏会话,无法恢复特定组件).有没有办法引入额外的日志记录来找出在每种情况下触发此异常的非常具体的情况?
Mojarra 2.0.4-b09 Tomcat 6使用Memcached Session Manager进行会话复制
任何帮助表示赞赏.谢谢!
我用表单打开一些选项卡,当我按下命令按钮时(会话过期一段时间后),我收到一条 java 脚本警报:
serverError: class javax.faces.application.ViewExpiredException viewId:/register.xhtml - 无法恢复 View /register.xhtml。
在 Firefox 上(本地 glassfish 4)
我已经添加了 :
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/index.xhtml?faces-redirect=true</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
在我的web.xml但我没有重定向到我的索引。这是为什么 ?
编辑:示例按钮
<h:commandButton value="Register" action="#{userController.register}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
UserController 是 ViewScoped
我有一个在Wildfly 8.1.0Final上运行的jsf应用程序,只有在谷歌浏览器中,当我点击登录按钮,我收到ViewExpiredException,在其他浏览器中,或在Chrome隐身模式下,工作完美!
有人知道会是什么?
20:29:18,531 INFO [stdout] (default task-49) 2014-09-16 20:29:18 ERROR context:218 - javax.faces.application.ViewExpiredException: viewId:/login.jsf - A exibição de /login.jsf não pôde ser restaurada.
20:29:18,532 INFO [stdout] (default task-49) at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:210)
20:29:18,532 INFO [stdout] (default task-49) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
20:29:18,532 INFO [stdout] (default task-49) at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:121)
20:29:18,532 INFO [stdout] (default task-49) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
20:29:18,532 INFO [stdout] (default task-49) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
20:29:18,532 INFO [stdout] (default task-49) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
20:29:18,533 INFO [stdout] (default task-49) at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)
20:29:18,533 INFO [stdout] (default task-49) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) …Run Code Online (Sandbox Code Playgroud) 我有一个使用JSF1.2 + Richfaces 3.3.3 Final,MyFaces 1.2.7,Spring + Hibernate的应用程序,当我清除浏览器的缓存和cookie并再次登录我的应用程序时,我每次都得到以下异常.
javax.faces.application.ViewExpiredException - /app/project/index.jsf
找不到视图标识符的已保存视图状态:/app/project/index.jsf
任何人都可以让我知道如何解决上述异常?
有没有办法让页面的会话保持活动而不需要将状态发送到客户端?我不能够设置STATE_SAVING_METHOD到client,我宁愿不使用a4j:keepalive.
我已经尝试使用提交给Bean的简单隐藏iframe,但它使主页无效.
我正在使用JSF 1.2和myfaces.
这是为了在不需要用户登录的页面上绕过ViewExpiredException.大多数现有站点都要求用户登录.