谷本 心 in せろ部屋

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

バリデータのアイデア

以前、
http://d.hatena.ne.jp/cero-t/20070622/1182530354
で書いてたバリデータを実現するためのアイデア


こんな感じで記述します。

<input type="text" id="year" m:label="年" m:value="#{xxxDto.year}" />
<input type="text" id="month" m:label="月" m:value="#{xxxDto.month}" />
<input type="text" id="day" m:label="日" m:value="#{xxxDto.day}" />
<span m:inject="s:validator2" m:binding="#{dateValidator}"
    m:targetId="year,month,day" m:eventId="doXxx"
    m:label="生年月日" />


機能はこんな感じ。

  • s:validator2のコンポーネントは、UIInputを継承していて、getSubmittedValue、getValue、getLocalValueで常に非nullの値を返します(=常にバリデーションが走ります)
  • m:bindingで、バリデーションの種類を選択します(s:validatorと同じ)
  • m:targetIdで、バリデーション対象を選択します。単数でも複数でも可能です(S2AnywhereValidatorと同じ)
  • m:eventIdで、このバリデーションを実施するボタンやコマンドリンクのidを指定します。未指定なら常にバリデーションします。
  • m:labelで、エラーメッセージに使うラベルを指定します(inputと同じ)
  • バリデーションエラー時には、エラーメッセージをレンダリングします(h:messageも取り込みます)


売りは、

  • ボタンごとに、適用するバリデーションを切り替えられます。
  • 「複数フィールドのいずれかが入力された場合のみOK」という、どうしても出来なかったバリデーションも実現できます。
  • h:messageを別途書く必要はありません。


S2JSF標準でサポートするには、(特にJSF的には)何だかなー、
という実装になりそうなので、S2JSF Extensionみたいな名前で
別JARとして提供する方が良いかも知れません。


その場合、カスタムタグのprefixはsじゃなくて、seかsxでしょうか。


もしくは両方あわせて、


ダメダメ。