11

ページの一部のコンポーネントの検証をバイパスしたいコマンド ボタン (具体的には [キャンセル] ボタン) があります。コマンド ボタンに immediate="true" を設定すると、更新属性が機能しません。「機能しない」とは、:centerForm:p_definition の値が本来あるべき値にリセットされないことを意味します。ドロップダウンからアイテムを選択するか、入力テキストにデータを入力すると、キャンセルをクリックすると情報が消えます。immediate="false" を設定するか、完全にオフのままにすると、期待どおりにフィールドがリセットされます。これが私が問題を抱えているコマンドボタンの定義です。

<p:commandButton value="Cancel" style="float: right;"
    immediate="true"
    actionListener="#{manageBomPropHandler.doCancel()}"
    update=":centerForm:p_definition"/>

それは、immediate="true" から期待される動作ですか? もしそうなら、キャンセルボタンのためにこれをどのように回避しましたか?

4

4 に答える 4

13

「Update」は、モデル値の更新フェーズで呼び出されて実行されます。ボタン コマンドに「immediate」属性を設定すると、このフェーズは無視されます。詳細については、以下の画像を参照してください。 標準ライフサイクルはモデル値の更新フェーズを実行します

          P1: Standard Lifecycle executes Update Model Values phase

Immediate Lifecycle は無視されます Update Model Values フェーズ

          P2: Immediate Lifecycle ignored Update Model Values phase
于 2014-12-05T02:35:15.413 に答える
2

役立つ場合は、プライムフェイスを使用したクリーンな入力フィールドのソリューションが既にあります。

<p:commandButton value="Reset Tag" update="panel" process="@this" style="margin-right:20px;" >
    <p:resetInput target="panel" />
</p:commandButton>

また

<h:commandButton value="Reset p:ajax" style="margin-right:20px;" >
    <p:ajax update="panel" resetValues="true" />
</h:commandButton>

ソース: http://www.primefaces.org/showcase/ui/misc/resetInput.xhtml

于 2016-04-23T07:26:05.233 に答える
1

私の場合、フィールドを更新するために、必要なコンポーネントに対して p:ajax を添付しました。これにより、ユーザーがこれらのフィールドのいずれかを変更するとすぐに、バッキング Bean の対応するフィールド/変数が更新されます。

私が持っていたもう 1 つの要件は、ユーザーがすぐに真のコマンド ボタンをクリックした後にデータ テーブルを更新することです。そのために、次のようなコードを使用しました。

RequestContext.getCurrentInstance().reset("Datatable ID"); 
于 2014-02-18T11:05:23.003 に答える
0

うん、JSF ライフサイクルに関する私の無知を示​​しています。ここで答えを見つけました:immediate="true"のJSF commandButtonとここ:https ://cwiki.apache.org/confluence/display/MYFACES/Clear+Input+Components

于 2012-12-28T21:29:52.780 に答える