Masa / Lino Blog

Masanori Satoh ( Masa / Lino ) の徒然ブログです

struts validwhenで相関チェック

validatorでActionFormの相関チェックを行うには
validwhenを使う。

書き方はこんな感じ。

  <field property="valid" depends="validwhen">
    <msg name="validwhen" key="errors.validwhen" />
    <var>
      <!-- ここはtestで固定 -->
      <var-name>test</var-name>
      <var-value>
        ((otherProperty != null) and (*this* != null))
      </var-value>
    </var>
  </field>

結構簡単に書ける。
# 大量に書くのは面倒。

ここでふと思う。「空文字(String "")チェックってどうやるんだろう」

<var-value>
  ((otherProperty != "") and (*this* != ""))
</var-value>

当然動かない。

仕方ないのでstrutsのソースを読むと、
型がStringかどうかチェックして、Stringの場合length=0なら
falseを返す。
つまり

<var-value>
  ((otherProperty != null) and (*this* != null))
</var-value>

でActionFormのProperty自体がnullの場合と空文字の場合を処理していた。


# 冷静になるとrequireとかlogic:emptyも空文字の場合動作するから
# validwhenも動作するのが当たり前…。