3

f:ajax が他の jsf または html タグと連携していることについてよく読んでいますが、それだけでは十分ではないようです!

ページに (必要な?) f:ajax タグを含む commandButton があり、アクションがトリガーされません。これがコードです。

<html>
  <h:head>
  </h:head>

  <h:body>
    <h:form>
      <h:commandButton action="#{bean.myFirstFunction}" value="Submit">
        <f:ajax render=":wrap" />
      </h:commandButton>
    </h:form>

    <h:panelGroup id="wrap">
      <h:panelGroup id="content" rendered="#{bean.myVariable != null}">

       <h:form>
         <h:commandButton action="#{bean.mySecondFunction}" value="Submit">
           <f:ajax render=":wrap" />
         </h:commandButton>
       </h:form>

      </h:panelGroup>
    </panelGroup>
  <h:body>
</html>

上記のように、2 つのボタンを取得しました。ラップの最初の 1 つが機能し、最初に非表示になっているラップ パネルを表示する必要があります。2 つ目はラップされており、まったく異なるアクションを開始する必要があります。(ラップは見せたままにしておく必要があります)

こちらが豆です。

@ManagedBean(name = "bean")
@ViewScoped
public class myBean {
  private Object myVariable;

  public void setMyVariable(Object o) { ... }
  public Object getMyVariable() { ... }

  @PostConstruct
  public void init() {
    this.myVariable = null;
  }

  public void myFirstFonction() {
    this.myVariable = new Object();
  }

  public void mySecondAction() {
    System.out.println("here");
  }
}

起動すると、最初のボタンが表示されます。それをクリックすると、2 つ目が表示されます。(したがって、最初の関数が呼び出され、オブジェクトがインスタンス化され、ajax タグを使用してラップがレンダリングされます。ただし、2 番目のボタンをクリックしても何も起こりません。

私は自分のコードの一部だけを書きました。間違いがここにあることを願っています。

パネル グループのレンダリング オプションに関するものだと思いますが、正確に見つけることができません。

ありがとう

4

2 に答える 2

5

commandButton/commandLink/ajax action/listener method not invoked or input value not set/updatedのポイント 9に従って、 JSF 仕様の問題 790の被害者です。フォームを含む一部のコンテンツを ajax 更新すると、ビュー ステートが失われます。簡単な回避策として、更新するフォームに ID を与え、それを明示的に参照する<f:ajax render>だけです。

  <h:body>
    <h:form>
      <h:commandButton action="#{bean.myFirstFunction}" value="Submit">
        <f:ajax render=":wrap :wrapForm" />
      </h:commandButton>
    </h:form>

    <h:panelGroup id="wrap">
      <h:panelGroup id="content" rendered="#{bean.myVariable != null}">

       <h:form id="wrapForm">
         <h:commandButton action="#{bean.mySecondFunction}" value="Submit">
           <f:ajax render=":wrap" />
         </h:commandButton>
       </h:form>

      </h:panelGroup>
    </panelGroup>
  <h:body>
于 2013-06-12T11:39:49.380 に答える
0

もっと簡単なことをすることにしました。実際、Bean は ViewScope にあるため、ページに ajax は必要ありません。そのため、ページがリロードされる可能性がありますが、実際には問題ではありません。だから私は私の f:ajax タグを取り除き、すべてが正しい.

于 2013-06-12T08:04:50.750 に答える