1

この問題に遭遇したとき、私はprimefacesコンポーネントをいじっていました...

以下を含むサンプルページがあります。

<h:form>
  <p:panel id="p1">
  <p:commandButton value="display" actionListener="#{myTestBean.display}" update="p2">     </p:commandButton>

  </p:panel>

  <p:panel id="p2" rendered="#{myTestBean.show}">

  <p:inputText value="#{myTestBean.val1}" id="t1"></p:inputText>
  <p:inputText value="#{myTestBean.val2}" id="t2"></p:inputText>
  <p:commandButton value="click me" update="@form" action="#{myTestBean.disply}"></p:commandButton>

  </p:panel>
   </h:form>

私のバッキングビーンには以下が含まれています。

 public class Testbean implements Serializable {
    private String val1;
  private String val2;

  private boolean show;

    //getters and setters for the above...

        public void display(){

    if(show == false){
        setShow(true);
    }

}

public void disply(){
    System.out.println("I am here");
    val1 = "hi";
    val2 = "hello";
    if(show == false){
        setShow(true);
    }

}
}

ここでの問題は、最初のボタン (表示) をクリックすると、下のパネル (p2) が正しくレンダリングされることです。しかし、2 番目のボタン (クリックしてください) をクリックすると、パネルが非表示になり、2 番目のボタンをクリックしても、バッキング Bean メソッド 'disply()' に移動しません。

2 番目のボタンでアクション リスナーを使用しましたが、これも同じ動作です。また、2 番目のボタンに update = "p2" を指定しましたが、それで望んだ結果が得られませんでした。

誰かがこれで私を助けて、私がどこで何を間違っているのか教えてもらえますか?

ありがとうございました。

4

2 に答える 2

4

同じビューに対する以前のすべての (ajax) アクションを記憶するには、Bean をビュー スコープに配置する必要があります。

@ManagedBean
@ViewScoped
public class TestBean {
    // ...
}

Bean がリクエスト スコープに配置されると、boolean showデフォルトに再初期化されるfalseため、JSF が呼び出されるアクション メソッドを探している間にrendered属性が評価さfalseれるため、アクション メソッドが見つからず、呼び出されません。

以下も参照してください。

于 2012-06-16T13:46:25.970 に答える