Java JSF组合不使用StateHelper存储状态
我正在开发一个JSF组合,它以一个复杂的数据结构作为参数: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
<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);
}