谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

バリデーションとエラーメッセージを考える

最近、久々にASP.NETに触ったんですが、
.NETでは「バリデーションのタグ」が「エラーメッセージのタグ」を兼ねる、
という所が便利に思いました。


こんな感じの記述。

<asp:TextBox ID="Text1" runat="server" ... />
<asp:RequiredFieldValidator ID="Text1Required" ControlToValidate="Text1" ... />
<asp:RegularExpressionValidator ID="Text1Regexp" ControlToValidate="Text1 ... />

バリデーションエラーが発生した時には、
バリデーションのタグの位置に表示されます。


これは、ASP.NETが、バリデーションの主体を「バリデーション処理(ロジック)」ではなく
「エラーメッセージ(見た目)」に置いている、ということでしょうか。


JavaだとStrutsの頃から、バリデーションは定義に書いて、
エラーメッセージは画面にタグを書いて、、、と当たり前のようにしてきましたが
バリデーションとエラーメッセージのタグを一つにまとめるのも、アリだな、と
今更ながらに思いました。


S2JSF風に記述するなら、こんな感じでしょうか。

<input id="xxx" type="text" m:value="yyyDto.xxx" label="zzz" />
<span m:inject="s:validator" m:binding="lengthValidator"
  m:maximum="10" m:target="xxx" />
<span m:inject="s:validator" m:binding="xxxValidatorChain"
  m:target="xxx" />

...

<span m:inject="s:validator" m:binding="calendarValidator"
  m:target="aaa,bbb,ccc" />


これなら、
<input>の子タグに<span>タグが入っている事をHTMLチェッカーに怒られたり、
<span m:inject="h:message">タグを埋め忘れてエラーが表示されない、なんて事も起きません。


それに、<textarea>の子タグに書いたバリデータが無視される、、、なんて
S2JSFで困った問題も起きないでしょう (^^;