セッターメソッドで検証を実行したり、バッキングBeanに検証メッセージを保存したりしないでください。問題全体は、設計が不適切であり、JSFが提供する検証機能を利用していないことが原因です。
完全に回避するのではなく、JSFが提供する検証機能を利用するだけで、これまでに説明したすべての問題が解消されます。required="true"
入力コンポーネントでvalidator="javax.faces.XxxValidator
、、、<f:validateXxx>
タグなどのJSF組み込みバリデーターのいくつかを使用できます。インターフェイスを実装し、またはValidator
で使用する一意のバリデーターIDを指定することで、カスタムバリデーターを作成できます。validator="myValidator"
<f:validator validatorId="myValidator">
JSF標準検証を使用する場合、検証エラーは、コンポーネントに関連付けられて表示される要求スコープ内のValidatorException
aとしてスローされます。このようにして、メッセージは後続のリクエストで「自動的に」消えます。FacesMessage
<h:message>
非常に基本的なキックオフの例を次に示します。
<h:form>
<h:inputText id="foo" required="true" requiredMessage="Enter this!" />
<h:message for="foo" />
<h:commandButton value="Submit" />
</h:form>
参照: