ネストした子のバリデーション
ネストした子Dtoのバリデーションはやってくれない?
とりあえず検証メソッドかな。
私も以前に確認したのですが、
アノテーションによるネストした子Dtoのバリデーションは、
複雑なことは対応しないという方針に基づいて、
やってくれないのが仕様です。
あと、私も以前にネストしたDto(スコープはセッションでした)に
バインドする方法を試みたのですが、以下の理由でやめました。
- 検証メソッドはアノテーションに比べて面倒
- Dtoが持つプロパティの型がStringかbooleanになってしまうためロジックで扱いづらい
- チェックボックスを受ける時にハマりやすい
- アクションフォームのリセットメソッドに相当するものがなくて困ります。
- Dtoがセッションで検索条件を保持した場合にブラウザの戻るボタンでクライアントとサーバーの状態がズレて挙動がおかしくなって悩む
自分が選択した代替手段としては、
一度アクションのプロパティで受けたものをDtoに詰め替えるようにしました。
こうすることでこのDtoはIntegerやDateなどを含む任意のデータ型なので、
ロジックでも扱い易くなりました。
クライアントからのデータの受け付けはフラットなアクションに
一本化した方がスッキリします。逆にDtoで入力値を受けると、
String系のDtoと任意データ型のDtoがdtoパッケージ以下に
ごちゃごちゃ混在してしまうことになるので、それは避けたいところ。
『Stringやbooleanのような画面系のデータ型ではなく、
ロジックとして扱いやすい任意のデータ型プロパティを持つこと』と
『リクエスト以外のスコープを管理する』というDtoの役割が明確になる利点もあります。