1
我開發一個JSF複合材料,其獲得一個複雜的數據結構作爲參數:使用在所述調用的init()方法JSF複合材料不存儲狀態與StateHelper
<cc:interface componentType="MyComponent">
<cc:attribute name="myModel" required="true" type="my.package.Model" />
</cc:interface>
背襯組件處理該模型通過事件的複合:
<cc:implementation>
<f:event type="postAddToView" listener="#{cc.init}" />
[...]
</cc:implementation>
在我檢查,如果該模式已被處理(因爲我不想這樣做,每次爲用戶停留在頁面上,例如,通過Ajax請求對這個init()方法)。因此,我存儲經由StateHelper.put()的處理的模型:
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);
}
我現在期待的是,如果在init()方法Ajax請求期間被調用,例如(在同一視圖中範圍)它不處理該模型是第二次,因爲我通過StateHelper將它存儲在視圖範圍中。但是不管我嘗試什麼,如果我點擊帶有void/null結果的命令鏈接,getMyModel()方法總是返回null。 任何想法?