このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
値の入力が必須である項目はほかにもあるので、
それらにも required ルールを適用してみよう。
備考以外は全て必須項目なので、required を適用できる。
プロトコルは String[] なので、ちょっと置いておき、
型が String である以下のプロパティに使ってみよう。
・rule.action
・rule.source.network
・rule.source.port
・rule.destination.network
・rule.destination.port
これらを昨日と同じように登録すれば、
恐らく以下のようなエラーメッセージになるはずだ。
・処理を入力してください。
・発信アドレスを入力してください。
・発信ポートを入力してください。
・宛先アドレスを入力してください。
・宛先ポートを入力してください。
まあ、これでも構わないのだが、
処理の項目は、「入力」というより、「選択」に近い。
そこで、この項目に関しては、
「処理を選択してください。」という風にしたい。
しかし、このメッセージは、errors.required キーに、
「{0}を入力してください。」と指定されているため、
{0} の部分しか置き換えることができない。
こういう場合は、<msg> 要素を利用する。
<msg> 要素を追加することで、
書式の基本となるメッセージのキーを明示し、
別のものを利用することができる。
逆に言うと、<msg> を指定しない場合、
ルールに基づいた既定値が使われるということでもある。
では、「選択」で使うためのメッセージを用意しよう。
キーは何でもいいのだが、選択が必須ということで、
errors.required.selection としておこう。
========== Messages_ja.properties ==========
# Validator 関係
errors.required = {0}を入力してください。
errors.required.selection = {0}を選択してください。
# プロパティ名
property.FilterRule.action = 処理
property.FilterRule.protocols = プロトコル
property.FilterRule.source.network = 発信アドレス
property.FilterRule.source.port = 発信ポート
property.FilterRule.destination.network = 宛先アドレス
property.FilterRule.destination.port = 宛先ポート
property.FilterRule.note = 備考
(…省略…)
========== end of Messages_ja.properties =========
では、Validator 設定ファイルを書く。
========== /WEB-INF/validation.xml ==========
(…省略…)
<form name="filterRuleForm">
<!-- 処理は必須-->
<field property="rule.action"
depends="required">
<msg name="required"
key="errors.required.selection" />
<arg name="required" position="0"
key="property.FilterRule.action" />
</field>
<!-- 発信アドレスは必須 -->
<field property="rule.source.network"
depends="required">
<arg name="required" position="0"
key="property.FilterRule.source.network" />
</field>
<!-- 発信ポートは必須 -->
<field property="rule.source.port"
depends="required">
<arg name="required" position="0"
key="property.FilterRule.source.port" />
</field>
<!-- 宛先アドレスは必須 -->
<field property="rule.destination.network"
depends="required">
<arg name="required" position="0"
key="property.FilterRule.destination.network" />
</field>
<!-- 宛先ポートは必須 -->
<field property="rule.destination.port"
depends="required">
<arg name="required" position="0"
key="property.FilterRule.destination.port" />
</field>
</form>
(…省略…)
========== end of /WEB-INF/validation.xml ==========
長くなったが、これは横幅を短くして折り返しているからで、
エディタ等で見る限りはそれほどではないはずだ。
<msg> 要素は、<field> 要素の子として追加する。
<field> 要素内での順番は自由なので、
<arg> の前でも後ろでも構わない。
<arg> と同じく、name 属性はルールの名前であり、
<field> 要素の depends 属性で指定したルールと合わせる。
key 属性が、基本となる書式メッセージが格納された、
メッセージリソースのキーとなる。
では、エラーメッセージを表示させてみよう。
処理はラジオボタンなので、既定で選択されてしまうが、
JavaScript で解除・直接送信するなどの方法で回避できる。
ちゃんと表示されることが確認された。