2012-02-27 4 views
1

Я использовал вид scope для bean-класса. Когда я запускаю свое приложение, я получил ошибку (JSF2.0, Richfaces3.3.3).java.io.NotSerializableException: javax.faces.component.html.HtmlForm

Если я использую область сеанса, следующий код работает нормально.

sample.jsp

<f:view> 
    <html> 
     <head> 
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     </head> 
     <body> 
     <h:form id="sampleForm" binding="#{Sample.initForm}"> 
      <h:outputText value="This is sample form"/> 
     </h:form> 
    </body> 
</html> 
</f:view> 

Sample.java

package com.sample; 

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.component.html.HtmlForm; 

@ManagedBean(name="Sample") 
@ViewScoped 
public class Sample implements Serializable 
{ 
    private HtmlForm initForm; 

    public HtmlForm getInitForm() 
    { 
     System.out.println("Sample initilaized....");  
     return initForm; 
    } 

public void setInitForm(HtmlForm initForm) 
{ 
    this.initForm = initForm; 
} 
} 

После выполнения этого кода, я получил следующее сообщение об ошибке

java.io.NotSerializableException: javax.faces.component.html.HtmlForm 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180) 
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) 
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
java.util.HashMap.writeObject(HashMap.java:1018) 
sun.reflect.GeneratedMethodAccessor46.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:616) 
java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962) 
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) 
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 
java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362) 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170) 
java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362) 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170) 
java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362) 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170) 
java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362) 
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170) 
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
com.sun.faces.renderkit.ClientSideStateHelper.doWriteState(ClientSideStateHelper.java:293) 
com.sun.faces.renderkit.ClientSideStateHelper.writeState(ClientSideStateHelper.java:167) 
com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:123) 
com.sun.faces.application.StateManagerImpl.writeState(StateManagerImpl.java:155) 
javax.faces.application.StateManagerWrapper.writeState(StateManagerWrapper.java:143) 
org.ajax4jsf.application.AjaxStateManager.writeState(AjaxStateManager.java:57) 
com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:221) 
com.sun.faces.application.view.JspViewHandlingStrategy.renderView(JspViewHandlingStrategy.java:225) 
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126) 
org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100) 
org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176) 
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206) 
org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290) 
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388) 
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) 

Помогите мне .. Заранее спасибо

ответ

4
java.io.NotSerializableException: javax.faces.component.html.HtmlForm 

HtmlForm действительно не Serializable. У вас есть 2 варианта:

  1. Просто не привязывайте компонент формы к виду, связанному с компонентом вида. Существуют, безусловно, другие способы достижения функционального требования, для которого вы считали правильным связывать компонент формы.

  2. Сделать свойство transient как так

    private transient HtmlForm initForm; 
    

    Таким образом, свойство будет пропущено при (де) сериализации.

+1

Спасибо за ваш ответ. Я использовал «переходный» тип для всех классов управляемых компонентов. в то время как я получил ту же ошибку. – jackrobert

+0

Либо код не был перестроен, либо ошибка на самом деле не то же самое (относится к другому классу, например). – BalusC

+0

Спасибо balusC, после перестройки он отлично работает. – jackrobert

Смежные вопросы