ViewScoped Bean导致NotSerializableException

imr*_*bti 9 jsf serialization spring jsf-2 notserializableexception

您好我正在使用ViewScoped Bean问题是,当调用它时,我得到NotSerializableException.

这是我的Managed Bean的代码:

@ManagedBean(name="demandesBean")
@ViewScoped
public class DemandesBean implements Serializable {
    private static final long serialVersionUID = 1L;

    @ManagedProperty(value="#{demandeService}")
    private DemandeService demandeService; //A Spring Service

    @ManagedProperty(value="#{loginBean}")
    private LoginBean loginBean;

    private DemandeVO newDemande;

    @PostConstruct
    public void initData() {
        newDemande = new DemandeVO();
    }

    public void doAjouterDemande(ActionListener event) {
        demandeService.createDemande(newDemande, loginBean.getUsername());
        newDemande = new DemandeVO();
    }

    public List<DemandeVO> getListDemande() {
        return demandeService.getAllDemandesByUser(loginBean.getUsername());
    }

    public DemandeService getDemandeService() {
        return demandeService;
    }

    public void setDemandeService(DemandeService demandeService) {
        this.demandeService = demandeService;
    }

    public LoginBean getLoginBean() {
        return loginBean;
    }

    public void setLoginBean(LoginBean loginBean) {
        this.loginBean = loginBean;
    }

    public DemandeVO getNewDemande() {
        return newDemande;
    }

    public void setNewDemande(DemandeVO newDemande) {
        this.newDemande = newDemande;
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下例外情况:

GRAVE: Exiting serializeView - Could not serialize state: com.bull.congesJBPM.serviceImpl.DemandeServiceImpl
java.io.NotSerializableException: com.bull.congesJBPM.serviceImpl.DemandeServiceImpl
Run Code Online (Sandbox Code Playgroud)

解决这个问题的任何方法?请帮忙 !

Arj*_*jms 7

另一个问题是MyFaces默认情况下会进行状态序列化,即使状态正在服务器上保存(默认值).这反过来要求视图范围的后台bean可序列化.

这种方法的优点在于历史是真正的历史.当您返回到先前的视图版本(使用后退按钮)时,您实际上获得了当时支持bean的确切版本.

结果是它似乎打破了服务注入(与此问题无关,是一个重大的性能打击).注入EJB服务时会出现完全相同的问题.

您可以在web.xml中放置一个上下文参数来禁用此行为:

<context-param>
    <param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
    <param-value>false</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

请参阅http://wiki.apache.org/myfaces/Performance

顺便说一句,Mojarra有类似的设置,但默认是假的.