Java 在portlet中的同一视图上调用多个ajax请求会导致ViewExpiredException

Java 在portlet中的同一视图上调用多个ajax请求会导致ViewExpiredException,java,jsf,portlet,viewexpiredexception,Java,Jsf,Portlet,Viewexpiredexception,我正在使用JSF和Ajax构建门户应用程序。 所有页面代码都在请求范围内。我们有一个包含2个portlet的页面,在其中一个portlet中,我们使用ajax重新加载组件 当我们进行这种重新提交时,我们可以修改它3次,当我们提交表单时,它会被提交,但是如果我们重新提交超过3次,当我们尝试提交时,它会给出一个视图过期异常,页面会重新加载,所有值都被清除 当前web.xml中没有逻辑视图数的条目。所以我猜它默认为15。如果我对此有一个条目,并将该值设置为30,我可以重新渲染大约10次,但如果超过10

我正在使用JSF和Ajax构建门户应用程序。 所有页面代码都在请求范围内。我们有一个包含2个portlet的页面,在其中一个portlet中,我们使用ajax重新加载组件

当我们进行这种重新提交时,我们可以修改它3次,当我们提交表单时,它会被提交,但是如果我们重新提交超过3次,当我们尝试提交时,它会给出一个视图过期异常,页面会重新加载,所有值都被清除

当前web.xml中没有逻辑视图数的条目。所以我猜它默认为15。如果我对此有一个条目,并将该值设置为30,我可以重新渲染大约10次,但如果超过10次,则会出现视图过期异常。(这可能会占用大量内存)

您能告诉我如何以视图的最佳利用率解决这个问题,并找出每个portlet使用了多少viewsa吗? 堆栈跟踪:

[12/8/11 16:45:43:304 CST] 00000051 servlet       E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: Uncaught exception created in one of the service methods of the servlet CreateCustomer in application CustomerDetailsEAR. Exception created : javax.servlet.ServletException: javax.portlet.PortletException: viewId:/create/CreateCustomerView.jsp - View /create/CreateCustomerView.jsp could not be restored.
    at com.ibm.ws.portletcontainer.invoker.impl.PortletServlet.doDispatch(PortletServlet.java:361)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletServletCollaboratorChainImpl.doCollaborator(PortletServletCollaboratorChainImpl.java:82)
    at com.ibm.isclite.container.collaborator.PortletServletCollaborator.doDispatch(PortletServletCollaborator.java:143)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletServletCollaboratorChainImpl.doCollaborator(PortletServletCollaboratorChainImpl.java:74)
    at com.ibm.ws.portletcontainer.rrd.RRDServerPortletServletCollaborator.doDispatch(RRDServerPortletServletCollaborator.java:60)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletServletCollaboratorChainImpl.doCollaborator(PortletServletCollaboratorChainImpl.java:74)
    at com.ibm.ws.portletcontainer.cache.CacheCollaborator.doDispatch(CacheCollaborator.java:74)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletServletCollaboratorChainImpl.doCollaborator(PortletServletCollaboratorChainImpl.java:74)
    at com.ibm.wps.pe.pc.waspc.core.impl.PortletServletCollaboratorImpl.doDispatch(PortletServletCollaboratorImpl.java:121)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletServletCollaboratorChainImpl.doCollaborator(PortletServletCollaboratorChainImpl.java:74)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletServlet.dispatch(PortletServlet.java:208)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletServlet.service(PortletServlet.java:165)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1655)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1595)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:104)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:895)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:932)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:500)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
    at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:121)
    at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.include(WebAppRequestDispatcher.java:673)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletInvokerImpl.invoke(PortletInvokerImpl.java:214)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletInvokerCollaboratorChainImpl.doCollaborator(PortletInvokerCollaboratorChainImpl.java:76)
    at com.ibm.ws.portletcontainer.cache.PortletInvokerCacheCollaborator.doAction(PortletInvokerCacheCollaborator.java:50)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletInvokerCollaboratorChainImpl.doCollaborator(PortletInvokerCollaboratorChainImpl.java:65)
    at com.ibm.ws.portletcontainer.ext.PortletInvokerPerformanceCollaborator.invoke(PortletInvokerPerformanceCollaborator.java:313)
    at com.ibm.ws.portletcontainer.ext.PortletInvokerPerformanceCollaborator.doInvoke(PortletInvokerPerformanceCollaborator.java:101)
    at com.ibm.ws.portletcontainer.ext.PortletInvokerPerformanceCollaborator.invokePMI(PortletInvokerPerformanceCollaborator.java:163)
    at com.ibm.ws.portletcontainer.ext.PortletInvokerPerformanceCollaborator.doInvoke(PortletInvokerPerformanceCollaborator.java:91)
    at com.ibm.ws.portletcontainer.ext.PortletInvokerPerformanceCollaborator.doAction(PortletInvokerPerformanceCollaborator.java:62)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletInvokerCollaboratorChainImpl.doCollaborator(PortletInvokerCollaboratorChainImpl.java:65)
    at com.ibm.ws.portletcontainer.invoker.impl.PortletInvokerImpl.action(PortletInvokerImpl.java:77)
    at com.ibm.ws.portletcontainer.PortletContainerImpl.doAction(PortletContainerImpl.java:186)
    at com.ibm.ws.portletcontainer.PortletContainerInvokerCollaboratorChainImpl.doCollaborator(PortletContainerInvokerCollaboratorChainImpl.java:78)
    at com.ibm.ws.portletcontainer.ext.ExtCollaborator.doAction(ExtCollaborator.java:58)
    at com.ibm.ws.portletcontainer.PortletContainerInvokerCollaboratorChainImpl.doCollaborator(PortletContainerInvokerCollaboratorChainImpl.java:65)
    at com.ibm.ws.portletcontainer.cache.CacheInvokerCollaborator.doAction(CacheInvokerCollaborator.java:76)
    at com.ibm.ws.portletcontainer.PortletContainerInvokerCollaboratorChainImpl.doCollaborator(PortletContainerInvokerCollaboratorChainImpl.java:65)
    at com.ibm.ws.portletcontainer.PortletContainerImpl.processPortletAction(PortletContainerImpl.java:152)
    at com.ibm.ws.portletcontainer.pcinvoker.PortletInvokerImpl$1.run(PortletInvokerImpl.java:59)
    at java.security.AccessController.doPrivileged(AccessController.java:251)
    at com.ibm.ws.portletcontainer.pcinvoker.PortletInvokerImpl.invokeProcessAction(PortletInvokerImpl.java:55)
    at com.ibm.wps.pe.pc.waspc.core.impl.PortletInvokerImpl$3.invoke(PortletInvokerImpl.java:115)
    at com.ibm.wps.pe.pc.waspc.core.impl.PortletInvokerImpl.invoke(PortletInvokerImpl.java:175)
    at com.ibm.wps.pe.pc.waspc.core.impl.PortletInvokerImpl.invokeProcessAction(PortletInvokerImpl.java:113)
    at com.ibm.wps.pe.pc.waspc.event.ActionEvent.execute(ActionEvent.java:78)
    at com.ibm.wps.pe.pc.waspc.event.EventQueueManager.processEventLoop(EventQueueManager.java:112)
    at com.ibm.wps.pe.pc.waspc.PortletContainerImpl.performEvents(PortletContainerImpl.java:206)
    at com.ibm.wps.pe.pc.PortletContainerImpl.performEvents(PortletContainerImpl.java:298)
    at com.ibm.wps.engine.phases.WPActionPhase.processPortlets(WPActionPhase.java:2644)
    at com.ibm.wps.engine.phases.WPActionPhase.execute(WPActionPhase.java:668)
    at com.ibm.wps.state.phases.AbstractActionPhase.next(AbstractActionPhase.java:130)
    at com.ibm.wps.engine.Servlet.callPortal(Servlet.java:855)
    at com.ibm.wps.engine.Servlet.doGet(Servlet.java:617)
    at com.ibm.wps.engine.Servlet.doPost(Servlet.java:888)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
    at com.ibm.wps.engine.Servlet.doFilter(Servlet.java:1257)
    at com.ibm.wps.resolver.servlet.ContentHandlerCleanup.doFilter(ContentHandlerCleanup.java:648)
    at com.ibm.wps.resolver.servlet.AbstractFilter.doFilter(AbstractFilter.java:93)
    at com.ibm.wps.engine.Servlet.service(Servlet.java:1248)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1655)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1595)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:131)
    at com.ibm.wps.engine.ExtendedLocaleFilter.doFilter(ExtendedLocaleFilter.java:113)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
    at com.ibm.wps.resolver.friendly.servlet.FriendlySelectionFilter.doFilter(FriendlySelectionFilter.java:191)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
    at com.ibm.wps.mappingurl.impl.URLAnalyzer.doFilter(URLAnalyzer.java:352)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
    at com.ibm.wps.engine.VirtualPortalFilter.doFilter(VirtualPortalFilter.java:88)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
    at com.ibm.wps.state.filter.StateCleanup.doFilter(StateCleanup.java:94)
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:895)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:932)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:500)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3810)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:931)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:183)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:272)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550)
Caused by: javax.portlet.PortletException: viewId:/create/CreateCustomerView.jsp - View /create/CreateCustomerView.jsp could not be restored.

您没有stacktrace?@gurung:ViewExpiredException的stacktrace通常没有帮助。什么JSF impl/version?这听起来像是每个ajax渲染都隐式地创建了一组视图,而不是重用它们。可能根本不发送
javax.faces.ViewState
隐藏字段。如果将
javax.faces.STATE\u SAVING\u METHOD
设置为
client
,会发生什么情况?我不确定Portlet在这里是如何发挥作用的,所以我不会将此作为回答。还可以使用Firebug/Chrome/Fiddler2检查ajax请求。在portlal应用程序中,每个portlet似乎都有一个视图。因此,如果一个页面有10个portlet,它将使用10个视图。当我尝试将state_saving_方法设置为client时,效果很好。将它设置为客户端还有其他影响吗?你能解释一下为什么它不能与服务器一起工作吗?我还认为,如果没有stacktrace,将它设置为客户端会使客户端更重?@gurung:a
ViewExpiredException
的stacktrace通常没有帮助。什么JSF impl/版本?这听起来像是每个ajax渲染都隐式地创建了一组视图,而不是重用它们。可能根本不发送
javax.faces.ViewState
隐藏字段。如果将
javax.faces.STATE\u SAVING\u METHOD
设置为
client
,会发生什么情况?我不确定Portlet在这里是如何发挥作用的,所以我不会将此作为回答。还可以使用Firebug/Chrome/Fiddler2检查ajax请求。在portlal应用程序中,每个portlet似乎都有一个视图。因此,如果一个页面有10个portlet,它将使用10个视图。当我尝试将state_saving_方法设置为client时,效果很好。将其设置为客户端是否还有其他影响?您能否解释一下为什么它不能与服务器一起工作?我还认为,将其设置为客户端会使客户端更重