1

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番目は私の値を設定します。

動作しますが、あまりうまくありません...

4

2 に答える 2

2

そこにあるのは何onchange="submit()"ですか?ひょっとしてフォーム送信をしているのですか?もしそうなら、それを削除してください...

また、immediate="true"検証をスキップすることを計画している必要がありますか?

于 2012-07-23T11:42:36.300 に答える
1

PrimeFaces selectOneButton のバグのようです。たとえば p:selectOneMenu を使用すると、1 つの JSF ライフサイクルで正常に動作します。

これは、 primefacesの既知の問題です。

于 2012-07-25T06:46:19.407 に答える