0

PrimeFaces を使用RequestContextして、マネージド Bean から JSF で定義されたダイアログを呼び出す方法はありますか?これにはフォームがありますが、マネージド Bean はユーザーがフォームを送信するまでスレッドの実行を待機します。

現在、マネージド Bean からダイアログを正常に呼び出していますが、呼び出しは非同期です。つまり、ダイアログは開かれますが、マネージド Bean スレッドは、ユーザーがダイアログを介して必要な追加データを提供するのを待たずに続行します。

したがって、私の JSF では、ダイアログを次のように定義しています。

<p:dialog header="My Dialog" widgetVar="myDialog" modal="false" height="100">
    <h:form>
        <h:outputLabel for="inputData" value="Input Data:"/>
        <p:inputText id="inputData" title="Input Data" 
                maxlength="16" required="true" ... >
        </p:inputText>
        <h:commandButton value="Submit"/>
    </h:form>
</p:dialog>  

マネージド Bean では、いくつかの基準が満たされた場合に条件付きでダイアログを呼び出します。

...
if(noteReqd) {
    RequestContext requestContext = RequestContext.getCurrentInstance();  
    requestContext.execute("PF('myDialog').show();");
    //here I want the managed bean to stop until the user supplies the extra data needed
    //but it just proceeds downstream without the data the user enters
}
...

関連している:

管理対象 Bean による追加データのオーバーレイのプロンプト

マネージド Bean からの JavaScript 関数の呼び出し

4

1 に答える 1

2

いいえ、できません。Primfaces の RequestContext は自分の仕事しかできず、その後 JSF ライフサイクルが続行され、javascript 情報 (PF('myDialog').show();何をすべきかなど) がクライアント (ブラウザ) に返されます。

解決策は、何らかの方法でロジックを変更することです。

  1. ユーザーがいくつかのデータを提供します
  2. データが十分かどうかを確認する
  3. そうでない場合は、同じフォーム (または別のフォーム) を再度開きます。
  4. 十分なデータが提供されるまで、ステップ 2 + 3 を実行します
  5. あなたの論理を続けてください
于 2015-07-03T05:47:09.267 に答える