WebSphere Application Server の Apache MyFaces 2 で PrimeFaces 3.3.1 を使用しています。私の BackingBean は SessionScoped です。selectOneButton を含むフォームがあり、フォーム全体を更新する必要があります。
<h:form id="options">
<p:panelGrid>
<p:column rowspan="2" style="width:115px;">
<p:selectOneButton value="#{graph.diagramdata}" id="diagramdata">
<f:selectItem itemLabel="WAS-Diagramm" itemValue="1" />
<f:selectItem itemLabel="PSC-Diagramm" itemValue="2" />
<p:ajax listener="#{graph.changeView }" update=":options"/>
</p:selectOneButton>
<h:outputText>#{graph.diagramdata}</h:outputText>
</p:column>
<p:column rendered="#{graph.diagramdata eq '1' }">
...
</p:column>
</p:panelGrid>
</h:form>
編集:バッキングビーンの一部
@ManagedBean(name = "graph")
@SessionScoped
public class MyGraphBean implements Serializable {
private int diagramdata;
public void changeView(AjaxBehaviorEvent event) {
LOGGER.info(this.getDiagramData());
}
public int getDiagramdata() {
return diagramdata;
}
public void setDiagramdata(int diagramdata) {
if(diagramdata == 1 || diagramdata == 2) {
this.diagramdata = diagramdata;
}
}
}
しかし、値を変更すると、jsf ライフサイクルが 2 回実行されます。最初は in.getValue は null で、2 回目は 1 または 2 (LOGGER から) です。しかし、最後に私の h:outputText は 0 を出力します...
デバッグするには、 BalusCを使用します: Debug JSF Lifecycle
ライフサイクルが 2 回実行されるのはなぜですか?
selectOneButton を使用して他の列を正しくレンダリングするにはどうすればよいですか?
編集:ダーティソリューション
問題の解決策を見つけました(非常に汚い!!!)。p:ajax コンポーネントを f:ajax に変更しました。これで、ライフサイクルの第 2 フェーズで値が正しい値に設定されました。
<p:selectOneButton value="#{graph.diagramdata}" id="diagramdata">
<f:selectItem itemLabel="WAS-Diagramm" itemValue="1" />
<f:selectItem itemLabel="PSC-Diagramm" itemValue="2" />
<f:ajax listener="#{graph.changeView }" render="options"/>
</p:selectOneButton>
また、「0」が設定されるのを避けるために、セッター メソッドに if ステートメントを追加しました。
最初のjsfライフサイクルは何もせず、2番目は私の値を設定します。
動作しますが、あまりうまくありません...