Java JSF组合不使用StateHelper存储状态

Java JSF组合不使用StateHelper存储状态,java,jsf,primefaces,jsf-2,composite,Java,Jsf,Primefaces,Jsf 2,Composite,我正在开发一个JSF组合,它以一个复杂的数据结构作为参数: <cc:interface componentType="MyComponent"> <cc:attribute name="myModel" required="true" type="my.package.Model" /> </cc:interface> 我现在希望,如果init()方法在Ajax请求期间(在同一视图范围内)被调用,它不会再次处理该模型,因为我已通过Sta

我正在开发一个JSF组合,它以一个复杂的数据结构作为参数:

<cc:interface componentType="MyComponent">
    <cc:attribute name="myModel"    required="true"     type="my.package.Model" />
</cc:interface>
我现在希望,如果init()方法在Ajax请求期间(在同一视图范围内)被调用,它不会再次处理该模型,因为我已通过StateHelper将其存储在视图范围内。但是无论我尝试什么,如果我单击一个命令链接,结果为void/null,getMyModel()方法总是返回null。
有什么想法吗?

在备份组件中实现
restoreState()
方法并设置断点揭示了问题。调用
restoreState()
之前,将处理
postAddToView
事件。使用
preRenderView
为我解决了这个问题。

在备份组件中实现
restoreState()
方法并设置断点揭示了问题。调用
restoreState()
之前,将处理
postAddToView
事件。使用
preRenderView
为我解决了这个问题

    <cc:implementation>
        <f:event type="postAddToView" listener="#{cc.init}" />
        [...]
    </cc:implementation>
public void init() 
{
    if (getMyModel() == null)
    {
        MyModel model = processModel(...);
        setMyModel(model);
    }
}

@SuppressWarnings("unchecked")
public MyModel getMyModel()
{
    return (MyModel) getStateHelper().get("MyModel");
}

public void setMyModel(MyModel MyModel)
{
    getStateHelper().put("MyModel", MyModel);
}