Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
2013/12/28 忘年会駆動
SQLWorld お だ
自己紹介
織田 信亮(おだ しんすけ)
大阪で開発者しています
SQLWorld の代表です
http://odashinsuke.hatenablog.com/
Twitter:@shinsukeoda
Bean Validation って?
Java Beans を アノテーションベースで検証する
フィールド、メソッド(get~, is~) に指定
フィールドの値、メソッドの戻り値に対して検証
.NET だと System.Component...
色んなのが標準で用意されてる
@Null, @NotNull
@AssertTrue, @AssertFalse
@DecimalMax, @DecimalMin, @Max, @Min
@Digits
@Size
@Pattern
…
ネストしたオブジェクトは?
標準では検証しない
@Valid 付けると、検証する
class Bean {
@NotNull(message="Nullだめ")
// @Valid がないと、nest の中までは検証しない
public Nes...
検証エラーのメッセージ
ValidationMessges.properties で書き換え可能
アノテーション指定時に直書きもOK
class Bean {
@NotNull(message="Nullだめ")
@Size(min=1, me...
検証用のアノテーション追加
複数のアノテーションを束ねる
アノテーションがまとまってスッキリ!

自前で Validator を実装することで、新しいアノテー
ションを作成可能
だいたい何でも出来るはず
検証を行う組み合わせを設定する
1つの Bean の中で検証を行うグループを指定する
interface SearchCondition{}
interface SearchResult{}
class GroupSample {
@NotNu...
Group の検証順序を設定する
検証を行う順序を決め、上位でエラーがあれば下位は行
わない
interface First{}
interface Second{}
@GroupSequence(#[Default, First,
Secon...
1つの項目で同じ検証を違う値で行う
コンテキストによって検証で使う値を変えたい
同じアノテーションは複数個設定出来ない
List を使って解決
interface Japan{}
interface Other{}
class BeerOrde...
今日の本題

JSF2 で Bean Validation
動くけど…
groups は 基本 Default だけっぽい
1個の form で複数ボタンの問題
このボタンの時は、検証したくない!例:行追加ボタンとか
immediate=“true“ すると、値も飛んでかない

このボタンの時は、この検...
使える・・・・・・!
使えるが・・・
使いやすいとは言っていない
そのことを
どうか諸君らも
思い出していただきたい
つまり・・・・
我々がその気になれば
使いやすくなるのは
JavaEE10、JavaEE20 ということも
可能だろう・・・・...
というわけで、自前でやる
資料作るガッツが足りない
間に合ったらコードで紹介
まとめ
BeanValidation
Próxima SlideShare
Cargando en…5
×

BeanValidation

3.060 visualizaciones

Publicado el

バリバリー、検証は任せろー。やめてー
2013/12/28 忘年会駆動 #hogedriven

Publicado en: Tecnología
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

BeanValidation

  1. 1. 2013/12/28 忘年会駆動 SQLWorld お だ
  2. 2. 自己紹介 織田 信亮(おだ しんすけ) 大阪で開発者しています SQLWorld の代表です http://odashinsuke.hatenablog.com/ Twitter:@shinsukeoda
  3. 3. Bean Validation って? Java Beans を アノテーションベースで検証する フィールド、メソッド(get~, is~) に指定 フィールドの値、メソッドの戻り値に対して検証 .NET だと System.ComponentModel.DataAnnotations が近い
  4. 4. 色んなのが標準で用意されてる @Null, @NotNull @AssertTrue, @AssertFalse @DecimalMax, @DecimalMin, @Max, @Min @Digits @Size @Pattern …
  5. 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 }
  6. 6. 検証エラーのメッセージ ValidationMessges.properties で書き換え可能 アノテーション指定時に直書きもOK class Bean { @NotNull(message="Nullだめ") @Size(min=1, message="{min} 以上") public String name @NotNull(message="{DateNotNull}") public Date entryDate @Digits(integer=3, fraction=1) public BigDecimal quantity }
  7. 7. 検証用のアノテーション追加 複数のアノテーションを束ねる アノテーションがまとまってスッキリ! 自前で Validator を実装することで、新しいアノテー ションを作成可能 だいたい何でも出来るはず
  8. 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. 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)
  10. 10. 1つの項目で同じ検証を違う値で行う コンテキストによって検証で使う値を変えたい 同じアノテーションは複数個設定出来ない List を使って解決 interface Japan{} interface Other{} class BeerOrder2 { @Min.List(#[ @Min(value = 18, groups=Other), @Min(value = 20, groups=Japan) ]) public int age }
  11. 11. 今日の本題 JSF2 で Bean Validation
  12. 12. 動くけど… groups は 基本 Default だけっぽい 1個の form で複数ボタンの問題 このボタンの時は、検証したくない!例:行追加ボタンとか immediate=“true“ すると、値も飛んでかない このボタンの時は、この検証したくない! groups が Default 以外変更出来そうにないので、無理ー
  13. 13. 使える・・・・・・! 使えるが・・・ 使いやすいとは言っていない そのことを どうか諸君らも 思い出していただきたい つまり・・・・ 我々がその気になれば 使いやすくなるのは JavaEE10、JavaEE20 ということも 可能だろう・・・・・・・・・・というこ と・・・・!
  14. 14. というわけで、自前でやる 資料作るガッツが足りない 間に合ったらコードで紹介
  15. 15. まとめ

×