3.4. f:validateRegex

f:validateRegex タグは正規表現により入力値を定義します。
HTML としては何も出力されませんが、他の HTML 系タグと組み合わせることでバリデーション (入力チェック) 機能として出力されます。

h:message または h:messages と組み合わせることでバリデーション結果を画面に出力することが可能となります。

sample3_4.xhtml
<h:body>
<h:form id="sample">
<h:commandButton type="submit" value="Check"/><br/>
入力項目:
<h:inputText id="checkText" label="入力項目">
<f:validateRegex pattern="[A-Z]\d{3,5}"/>
</h:inputText><br/>
<h:message for="checkText"/>
</h:form>
</h:body>

画面
赤び~の備忘録-20100719_16_JSF16

HTML
<body>
<form id="sample" name="sample" method="post"
action="/glassfish/faces/sample/sample3_4.xhtml"
enctype="application/x-www-form-urlencoded">

<input type="hidden" name="sample" value="sample" />
<input type="submit" name="sample:j_idt7" value="Check" /><br/>
入力項目:
<input id="sample:checkText" type="text" name="sample:checkText" /><br />
  <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-8318726776424984964:1388163035168003767" autocomplete="off" />
</form>
</body>

(*) 一部改行を追加しています。

初期表示状態では特に HTML は表示されません。

f:validateRegex は pattarn 属性に指定した正規表現にもとづき入力文字が制限されます。
指定可能な正規表現は java.util.regex.Pattern に準拠しているようです。

h:message と入力項目は for 属性に id 属性を指定することで紐付けます。

sample3-4.xhtml では「先頭文字が英字大文字 + 3桁以上 5桁未満の数字」と定義していますので、その範囲内の少数値をテキストボックスに入力後 Check ボタンを選択しても画面に変化はありません。

正常時の画面
赤び~の備忘録-20100719_17_JSF17

ですが、指定した正規表現に一致しない文字列を入力した場合は h:message の場所にエラーメッセージが表示されます。

エラー時の画面
赤び~の備忘録-20100719_18_JSF18 赤び~の備忘録-20100719_19_JSF19
(*) エラーメッセージが英語のままとなっています。日本語化の方法は調査中です。


エラー時のHTML
<body>
<form id="sample" name="sample" method="post"
action="/glassfish/faces/sample/
sample3_4.xhtml"
enctype="application/x-www-form-urlencoded">

<input type="hidden" name="sample" value="sample" />
<input type="submit" name="sample:j_idt7" value="Check" /><br />
入力項目:
<input id="sample:checkText" type="text" name="sample:checkText" value="a1234" /><br/>
Regex pattern of '[A-Z]\d{3,5}' not matched
<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-8318726776424984964:5470059355040937594" autocomplete="off" />
</form>
</body>

(*) 一部改行を追加しています。

理由は不明ですが、f:validateRegex では label 属性で指定した項目名を表示するためのメッセージ定義はされていないようです。

[ END ]