SAStrutsでのClientValidatorの実行順番を検証する

タイトルはホッテントリメーカーにてそれっぽいのを拾ってもじりました。


さて、これも私的メモの意味合いが強いですが、
SAStrutsのClientValidatorの実行順の法則について
なんとなくこれっぽいというのを見つけたのでメモっていこうかなと。

ちなみにコレはvalidatorの実行順と同義なのかな?と思ったりするがどうだろ
うか?
(未検証。適当なこと言っています。)


先に結論をいうと、
実施するvalidatorの中でActionFormの上から定義された順でおこなう。
一つのチェックで対象の項目をすべてチェックする。
となります。

例えば

public class XXXForm{
  @Required
  public String inputA;

  @Maxlength
  public String inputB;
}

の場合は@Required⇒@Maxlengthとなりますし、

public class XXXForm{
  @Maxlength
  @Required
  public String inputA;

  @Maxlength
  public String inputB;
}

となった場合は@Maxlength⇒@Requiredとなります。

で、各チェックに関しては
@Requiredがついているものをすべてチェック⇒@Maxlengthがついているもの・・・

と、全項目チェックしてから次のチェックに移ります。
(これはStrutsのClientValidatorの制約です。)
ちなみにメッセージは各チェックごとにalertが出る感じになります。
(これもStrutsのClientValidatorの制約。)

で、ここから注意点なのですが、
この順は対象のExecuteメソッドでおこなうチェックに限ります。
ですので、例えば

public class XXXForm{
  @Maxlength(target = "xxx")
  @Required
  public String inputA;

  @Maxlength
  public String inputB;
}

としたとき、Executeメソッド"yyy"で実行しようとすると、
一番上の@Maxlengthは対象外なので、
その下の@Requiredから実行され
@Required⇒@Maxlengthの順で実行されます。
最初これに気づかずにちょっとハマった。

まあ、あまり意識するような内容でもない気がしますが念のため。