I eine JSF Verbund bin zu entwickeln, die eine komplexe Datenstruktur als Argument erhält:JSF Verbund nicht speichert Zustand mit StateHelper
<cc:interface componentType="MyComponent">
<cc:attribute name="myModel" required="true" type="my.package.Model" />
</cc:interface>
das unterstützende Komponente verarbeitet dieses Modell eine init() Methode, die in der aufgerufen wird, Verbund über ein Ereignis:
<cc:implementation>
<f:event type="postAddToView" listener="#{cc.init}" />
[...]
</cc:implementation>
In diesem init() Methode, die ich prüfen, ob das Modell bereits verarbeitet worden ist (weil ich, dass jedes Mal nicht tun möchte der Benutzer auf der Seite bleibt, zB durch aJAX-Anfragen). Daher speichere ich das bearbeitete Modell über 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);
}
ich jetzt erwarten, dass, wenn die Methode init() zum Beispiel während eines Ajax-Request (in dem gleichen Ansicht scope) aufgerufen wird, es nicht tut Prozess das Modell ein zweites Mal, weil ich es über den StateHelper im View-Scope gespeichert habe. Aber egal, was ich versuche, wenn ich auf eine Befehlsverbindung mit void/null outcome klicke, gibt die Methode getMyModel() immer null zurück. Irgendwelche Ideen?