Mais conteúdo relacionado
Semelhante a BeanValidation (12)
Mais de Oda Shinsuke (20)
BeanValidation
- 3. Bean Validation って?
Java Beans を アノテーションベースで検証する
フィールド、メソッド(get~, is~) に指定
フィールドの値、メソッドの戻り値に対して検証
.NET だと System.ComponentModel.DataAnnotations が近い
- 5. ネストしたオブジェクトは?
標準では検証しない
@Valid 付けると、検証する
class Bean {
@NotNull(message="Nullだめ")
// @Valid がないと、nest の中までは検証しない
public Nest nest
@NotNull(message="Nullだめ")
@Size(min=1, message="要素は1個以上")
@Valid // @Valid があるので、各要素に対しても検証を行う
public List<Nest> details
}
class Nest {
@NotNull(message="NullNG")
public String name
}
- 8. 検証を行う組み合わせを設定する
1つの Bean の中で検証を行うグループを指定する
interface SearchCondition{}
interface SearchResult{}
class GroupSample {
@NotNull(groups=SearchCondition)
@Size(min=1, groups=SearchCondition)
public String orderNoFrom
@NotNull(groups=SearchCondition)
@Size(min=1, groups=SearchCondition)
public String orderNoTo
@NotNull(groups=SearchResult)
@Size(min=1, groups=SearchResult)
public List<String> results
}
validator.validate(new GroupSample)
.length.is(0)
validator.validate(new GroupSample
, SearchCondition).length.is(2)
validator.validate(new GroupSample
, SearchResult).length.is(1)
validator.validate(new GroupSample
, SearchCondition, SearchResult
).length.is(2)
- 9. Group の検証順序を設定する
検証を行う順序を決め、上位でエラーがあれば下位は行
わない
interface First{}
interface Second{}
@GroupSequence(#[Default, First,
Second])
interface Seq {}
class BeerOrder {
@NotNull
@Size(min=1, groups=First)
public String name
@Min(value=20, groups=Second)
public int age
}
validator.validate(new BeerOrder
, Seq).length.is(1)
validator.validate(new BeerOrder =>
[ name="" ], Seq).length.is(1)
validator.validate(new BeerOrder =>
[ name="aaa" ], Seq).length.is(1)
- 13. 動くけど…
groups は 基本 Default だけっぽい
1個の form で複数ボタンの問題
このボタンの時は、検証したくない!例:行追加ボタンとか
immediate=“true“ すると、値も飛んでかない
このボタンの時は、この検証したくない!
groups が Default 以外変更出来そうにないので、無理ー