7

サポートされている複数の ajax イベントの順次処理の JSF 2.x 機能が機能しません。私は次のシナリオを得ました:

  1. h:inputText (変更)

    <h:inputText id="consumption_input"
       value="#{cc.attrs.consumptionInfo.consumption}">
      <f:ajax
         render="#{cc.attrs.outerRenderString}"
         event="change" listener="#{cc.handleAjaxRequest}" />
    </h:inputText>
    
  2. h:commandButton (アクション)

    <h:commandButton
        id="startComparisonButton"
        action="#{rateComparisonBean.startRateComparison()}"
        value="#{bundle.rateResultOverview_startComparison}">
        <!-- This is to avoid mixed requests, ajax and full requests -->
           <f:ajax render="@form"/>
        </h:commandButton>
    

両方の要素のイベントは、単独でトリガーされた場合に正しく処理されます。

両方のイベントが 1 回のクリックでトリガーされると問題が発生します (textInput に値を入力してからボタンをクリックします)。これにより、2 つの ajax リクエストが同期的に起動されると予想していました (CHANGE-TextField と ACTION-commandButton)。

残念ながら、Ajax-Request (Change-TextField) は 1 つしかなく、2 番目のイベントは完全に失われているようです。

ここで指摘されているように、ah:commandButton のすべての前提条件が完全に満たされていることを確認しました: commandButton/commandLink/ajax アクション/リスナー メソッドが呼び出されないか、入力値が更新されない

この問題を解決する方法についてのヒントをいただければ幸いです。

環境: Glassfish 3、Mojarra 2.1.3-FCS

4

2 に答える 2

0

まず、迅速で洗練された返信に感謝します。

ゼロからの 2 回目のテストでは、ajax イベントが適切にキューに入れられていることが指摘されました。

そこで、上記のより複雑なシナリオをもう一度確認しました。スキップされたイベント シームの原因は、「ビジー オーバーレイ」に関連しています。フォーム要素を無効にし、実行時間の長い ajax リクエスト中にオーバーレイを適用する一連の JavaScript と考えてください。これは、jsf.ajax.addOnEventコールバックを適用することによって行われます。

とにかく、一部のコントロールを無効にしても、「成功」した後、フォームは適切な状態になり、2 番目のイベントを処理できます。

現在、「一時的に」無効になっているボタンは、後で実行する必要がある関連するアクションイベントを危険にさらしていると思います。

現在問題を分析しており、最終結果をできるだけ早く投稿します。

于 2013-05-03T21:32:13.447 に答える