検証時に h:inputText ラベル フィールド値を呼び出そうとすると、特有の問題が発生します。ラベル フィールドに静的な値を渡す場合にのみ機能します。動的な値を渡すと、そのフィールドの検証が失敗すると、ラベルのレンダリングに失敗します。
<h:inputText id="fullNameField" value="#{newUserFormBean.fullName}"
**label="${nlsSupport.label_fullName}"** required="true" size="32" styleClass="required">
<f:validateLength minimum="3" maximum="64"/>
</h:inputText>
最小長の検証が失敗した場合、次のようなエラー メッセージが表示されます。
ここに表示されるラベルはありません: 最低 3 文字である必要があります
しかし、動的な値を渡す代わりにラベルをハードコーディングすると、有効な検証メッセージが表示され、ラベル名が画面に表示されます。
<h:inputText id="fullNameField" value="#{newUserFormBean.fullName}"
**label="Full Name"** required="true" size="32" styleClass="required">
<f:validateLength minimum="3" maximum="64"/>
</h:inputText>
現在、最小長の検証が失敗した場合、エラー メッセージは次のように表示されます。
氏名: 最低 3 文字である必要があります
JSF のドキュメントも確認しましたが、ラベルが式言語の式を受け入れると書かれています。では、失敗した検証後に渡された動的な値がレンダリングされないのはなぜですか?
また、さまざまな言語の National Language Feature を追加するために、(リソース バンドルから) ラベルを動的に渡す必要があります。これが、静的フィールドの代わりに動的な値を label 属性に渡さなければならない理由です。
ありがとう。