【问题标题】:rich:fileUpload ViewExpiredException丰富:文件上传 ViewExpiredException
【发布时间】:2012-09-12 18:35:04
【问题描述】:

我正在使用丰富的文件上传:

<rich:fileUpload id="upload" addLabel="Add File"
      clearAllLabel="Delete Files" deleteLabel="Remove" 
      uploadLabel="Process Fle" doneLabel="Processed file" 
      clearLabel="Close" listHeight="100" 
      maxFilesQuantity="1" fileUploadListener="#{mbean.listener}" > 
      <a4j:ajax event="uploadcomplete" execute="@none" render="panelResult"  />
</rich:fileUpload>

mbean.listener中的java代码运行正常,但是当进程结束时,显示如下错误:

09:03:49,385 ERROR [br.com.enterprise.enterprisex.faces.common.EnterpriseExceptionHandler] EnterpriseExceptionHandler.handle: 
javax.faces.application.ViewExpiredException: /1_ProcessForm.jsfNo saved view state could be found for the view identifier: /1_ProcessForm.jsf
at org.apache.myfaces.lifecycle.RestoreViewExecutor.execute(RestoreViewExecutor.java:132)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)

mbean.listener:

    public void listener(FileUploadEvent event) throws Exception {
    UploadedFile item = event.getUploadedFile();
    LOGGER.debug("upload listener: fileName=" + item.getName());        
}

这个错误只发生在richfaces的这个组件中。是否需要做一些额外的配置?

谢谢。

【问题讨论】:

  • 请在此处粘贴文件上传监听器。
  • @kolossus,我编辑问题并添加听众。代码没问题。谢谢。

标签: spring jsf-2 richfaces viewexpiredexception


【解决方案1】:

你认识那条路径/1_ProcessForm.jsf吗?由于该路径不存在,上下文很可能在这一点上令人窒息。该路径是否与您正在上传文件的页面的视图 ID 完全对应(包括前导斜杠“/”)

编辑:显然a bug with RF 4.0 可能要为此负责。让我们知道您如何处理这个问题

【讨论】:

  • 路径没问题。当配置 javax.faces.STATE_SAVING_METHOD 为“服务器”时,此组件运行正常,但我需要将其设为“客户端”,因为其他原因:stackoverflow.com/questions/12370904/…
  • 这似乎是带有 RF 的bug。对不起。编辑答案以反映研究
  • 感谢您的回答。我看到了:community.jboss.org/thread/164999 然后我将我的 mbean 从 ViewScoped 更改为 SessionScoped 并解决了问题,但我认为这不是理想的解决方案,因为这个 mbean 应该是 viewScoped。
  • 这绝对不是理想的。如果您已经有一个@SessionScoped bean(例如,代表一个通用用户会话),您可以在其中存储与您的操作相关的工件,并为页面使用@RequestScoped bean。从长远来看,为您节省一些堆空间并可能滥用 SessionScope
猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 2011-05-31
  • 2015-03-12
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 2011-07-27
相关资源
最近更新 更多