2012-10-25 95 views
1

我做迁移形式JSF 1.2到JSF 2.1在一个相当大的项目。有几个库使用:3.6冬眠,春天3.1(据我所知,我的前任更新形式2.X)一样,Acegi安全-1.0.5,tomahawk20,urlrewrite-3.2.0。当我完成迁移到jsf2.1时,我将更新所有这些文件。java.io.NotSerializableException弹簧和@ViewScoped豆

我将faces-config.xml中beans的条目更改为注释,并将JSTL标记更改为JSF(c:如果要呈现属性或ui:fragment部分)现在没有JSTL。这个项目中的豆子有很多参数。 Ajax在那里使用,所以我决定使用@ViewScoped,但我有例外(粘贴)。我不知道为什么用@SessionScoped exeption没有出现,并且一切正常。我知道SessionSoped的寿命比View长,但这个例子有什么不同?

我读了几个Q &听到并添加了Serializable接口,我在Spring beans配置文件中找到了类,但仍然无法使用。

即此条:

<bean id="SomeDaoImpl" class="my.package"> 
    <property name="sessionFactory"> 
     <ref bean="sessionFactory" /> 
    </property> 
</bean> 

我实现Serializable接口在SomeDaoImpl类,但没有帮助。

我加入此项目到我的web.xml,但仍然无法正常工作。

<context-param> 
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name> 
    <param-value>false</param-value> 
</context-param> 

该类org.springframework.orm.hibernate3.HibernateInterceptor我在春天是豆类发现XML文件,

例外:

SEVERE: Error Rendering View[/folder1/folder2/index.xhtml] 
java.io.NotSerializableException: org.springframework.orm.hibernate3.HibernateInterceptor 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1346) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1154) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) 
at java.util.HashMap.writeObject(HashMap.java:1001) 
at sun.reflect.GeneratedMethodAccessor117.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:940) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1346) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1154) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) 
at java.util.HashMap.writeObject(HashMap.java:1001) 
at sun.reflect.GeneratedMethodAccessor117.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:940) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) 
at com.sun.faces.renderkit.ClientSideStateHelper.doWriteState(ClientSideStateHelper.java:346) 
at com.sun.faces.renderkit.ClientSideStateHelper.writeState(ClientSideStateHelper.java:182) 
at com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:122) 
at com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:113) 
at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225) 
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:441) 
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:124) 
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) 
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288) 
at org.apache.myfaces.tomahawk.application.ResourceViewHandlerWrapper.renderView(ResourceViewHandlerWrapper.java:93) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
at my.package.util.faces.LifecycleDecorator.render(LifecycleDecorator.java:90) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at my.package.util.ie9fix.ie9fixFilter.doFilter(ie9fixFilter.java:41) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) 
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:357) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) 
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107) 
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72) 
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) 
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:166) 
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) 
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) 
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) 
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:135) 
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) 
at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81) 
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) 
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271) 
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) 
at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110) 
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) 
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249) 
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) 
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) 
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) 
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) 

我应该怎么检查或读取任何提示明白我错了什么? 我和JSF一起工作了几个星期,而且我还在学习。我从来没有用过春天。

+0

为什么首先在JSF托管bean中有'HibernateInterceptor'属性? – BalusC

+0

@BalusC,我不明白。 HibernateInterceptor在spring bean中,它是由我的前任在xml文件中定义的。 –

+0

你可能想看看CDI/EJB而不是传统的Spring。 CDI/EJB中不存在此问题,因为它们使用100%代理。 – BalusC

回答

2

你仍然得到的序列化异常,因为org.springframework.orm.hibernate3.HibernateInterceptor(你可以从堆栈跟踪看)并没有实现序列化。在您看来的某个地方,有一个使用这个类的实例,当JSF尝试将您的视图状态序列化到客户端时,它会因为违规类而失败。 加入下面进入你的web.xml

<context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>SERVER</param-value> 
    </context-param> 

设置你的STATE_SAVING_MODESERVER在web.xml如果你必须有它的其他方式(CLIENT),你需要标记变量引用违规类别为transient,因此在序列化期间将其忽略

+0

异常消失,但现在ViewScoped我改变输入数据的形式,但计算在我的形式默认输入完成后,在结果没有什么变化。通过SessionScope,它可以正常工作。我将javax.faces.PARTIAL_STATE_SAVING更改为true。 –

+0

@ k.nieszporek等待,用'javax.faces.PARTIAL_STATE_SAVING =真',你的看法不成? – kolossus

+0

是的,它是,我有 <的context-param> ​​javax.faces.PARTIAL_STATE_SAVING 但@ViewScoped不起作用。随着SessionScoped它的作品。 –