JSFで複数ボタンでの Validator問題

2009/09/02 17:58Update
TAGS: JSF | Validator | バリデーション | commandButton | immediate

JSFで複数ボタンでの Validator問題について解析します。

JSF Validatorの使い方について
――――――――――――――――――――――
JSF Validator入門 - 標準Validator及びその使い方
――――――――――――――――――――――

問題


例えば、
価格:
<h:inputText id="value" value="#{mybean.value}">
     <f:validateDoubleRange maximum="5"></f:validateDoubleRange>
</h:inputText>
<h:message for="value"></h:message>
<h:commandButton value="計算" .. />

計算ボタンを押すと、「価格」に設定したf:validateDoubleRangeが行われます。
これは一見では何の問題もありません。
しかし、
<h:commandButton value="計算" .. />では、何の入力項目のバリデーションが行われるべきかを指定することができないため、
同じフォームの場合、
1)設定したすべてのValidatorが実行されますので、ボタン別に実行したいValidatorを指定できません。
  例えば、Aボタンの場合、a項目のバリデーションを行い、Bボタンではb項目のバリデーションを行うことが指定できません。
2)バリデーション処理を行いたくないボタンでもValidatorが実行されてしまいます。
  例えば、「戻る」ボタンの場合、当然バリデーションを行う必要がありません。

解決策


1)残念ながら、同じフォームにボタン別に実行されるValidatorを指定できません。
2)h:commandButtonにimmediate="true"をつけることで、バリデーションを行わなくなります。
  例:
  <h:commandButton value="戻る" immediate="true" />
  
  ※記憶によりますと、immediate="true"が指定されると、入力項目のコミット値がmanaged-beanにセットされないようです。

有关作者
Syboos.jp編集長システム設計や開発、保守運営などを行ってます。オープンソース技術に興味があります。

Sponsored Link


Comments