web-dev-qa-db-ja.com

特定のボタンがクリックされたときに検証をスキップする方法は?

1つのフィールドにバリデータを持つフォームがあります。私は2つを持っています h:commandButtons:Ok and Cancel。間違ったデータを入力して[キャンセル]をクリックすると、検証メッセージが表示されます。[キャンセル]をクリックしたときにバリデータが実行されないようにするにはどうすればよいですか?

28
Aram Gevorgyan

Ajaxを使用していない場合、またはまだJSF 1.xを使用していて、cancel()メソッドでビジネスアクションを呼び出す必要がある場合(つまり、ページをリロードするだけでは不十分)、最善の策_immediate="true"_をボタンに追加することです。このように、_immediate="true"_を持たないすべての入力フィールドは処理でスキップされます。

_<h:commandButton value="Cancel" action="#{bean.cancel}" immediate="true" />
_

JSF 2.xでは、_<f:ajax>_ではなく_@this_のみをデフォルトで処理する_@form_によってフォームを送信する方がはるかに優れています。

_<h:commandButton value="Cancel" action="#{bean.cancel}">
    <f:ajax />
</h:commandButton>
_

ここで別のページに移動する場合は、cancel()メソッドの結果に_?faces-redirect=true_を追加します。

または、実際にビジネスアクションをまったく呼び出す必要がない場合は、_<h:button>_を使用して、(暗黙の)ナビゲーションケースの結果を直接指定します。

_<h:button value="Cancel" outcome="previouspage" />
_

これは基本的にGETリクエストによってページをリロードします。 _<h:button>_はJSF 1.xには存在しませんが、プレーンHTML + JSを使用することもできます。

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

58
BalusC