Validation

今日はTeedaで簡単なアプリケーションを作成してみた。なるほど、単純にテーブルを検索・更新するだけならあっという間にできる。
じゃぁ肉付けしてみよう・・・と思ったら早速Validationでつまずきました。

複数のボタンに関連付け

@Requiredだけだと全ボタンで必須チェックがかかってしまうし、@Required(target="doAction")のようにやるとひとつのボタンにしか関連付けられない。という訳でソースを調査。

targets = StringUtil.split(target, ", ");

TRequiredValidatorに上記のようなコードを発見。カンマ区切りで複数指定できる模様。

ラジオボタンの必須チェック

inputRadioの部分だけ必須チェックが効かなかったのでメーリングリストをチェック。そうしたら直しましたよ的な話が出ていたが、それはinputRadioではなくselectOneRadioの話っぽい。確かにselectOneRadioにしたら必須チェックが動作した。ということはinputRadioでは必須チェック不可ということか・・・。DTO作るのが面倒なのでinputRadioにしたけど実際にはselectOneRadioしか使わないと思われるのでまぁいっかという感じ。

selectOneRadio用DTO

そういう訳でDTOを作ってselectOneRadioにしてみたけどラジオボタンが表示されない。どうやらDTOは「label」と「value」というプロパティで作らなければいけない模様。

DTOを作る場所

initializeではなくprerenderで。というかページ読み込む度に作るんではなくてDIするのがいいかも。

条件付必須チェック

例えばラジオボタンである値が選択されたら他の項目が必須になるというような場合はDynamicValidator(teeda-html-exampleにそういう名前でサンプルが用意されてました)が使えます。

public Validator getAaaValidator() {
    if(bbb=1){
        ValidatorChain chain = new ValidatorChain();
        TRequiredValidator tRequiredValidator = new TRequiredValidator();
         tRequiredValidator.setTarget("doAction");
        chain.add(tRequiredValidator);
        return chain;
    }else{
        return null;
    }
}

こうすればbbbが1の場合だけaaaに必須チェックがかかるようになります。
※↑について訂正があります。ここを参照のこと。