SlideShare uma empresa Scribd logo
1 de 16
2013/12/28 忘年会駆動
SQLWorld お だ
自己紹介
織田 信亮(おだ しんすけ)
大阪で開発者しています
SQLWorld の代表です
http://odashinsuke.hatenablog.com/
Twitter:@shinsukeoda
Bean Validation って?
Java Beans を アノテーションベースで検証する
フィールド、メソッド(get~, is~) に指定
フィールドの値、メソッドの戻り値に対して検証
.NET だと System.ComponentModel.DataAnnotations が近い
色んなのが標準で用意されてる
@Null, @NotNull
@AssertTrue, @AssertFalse
@DecimalMax, @DecimalMin, @Max, @Min
@Digits
@Size
@Pattern
…
ネストしたオブジェクトは?
標準では検証しない
@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
}
検証エラーのメッセージ
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
}
検証用のアノテーション追加
複数のアノテーションを束ねる
アノテーションがまとまってスッキリ!

自前で Validator を実装することで、新しいアノテー
ションを作成可能
だいたい何でも出来るはず
検証を行う組み合わせを設定する
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)
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)
1つの項目で同じ検証を違う値で行う
コンテキストによって検証で使う値を変えたい
同じアノテーションは複数個設定出来ない
List を使って解決
interface Japan{}
interface Other{}
class BeerOrder2 {
@Min.List(#[
@Min(value = 18, groups=Other),
@Min(value = 20, groups=Japan)
])
public int age
}
今日の本題

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

このボタンの時は、この検証したくない!
groups が Default 以外変更出来そうにないので、無理ー
使える・・・・・・!
使えるが・・・
使いやすいとは言っていない
そのことを
どうか諸君らも
思い出していただきたい
つまり・・・・
我々がその気になれば
使いやすくなるのは
JavaEE10、JavaEE20 ということも
可能だろう・・・・・・・・・・というこ
と・・・・!
というわけで、自前でやる
資料作るガッツが足りない
間に合ったらコードで紹介
まとめ

Mais conteúdo relacionado

Semelhante a BeanValidation

111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
Takayoshi Tanaka
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
 

Semelhante a BeanValidation (12)

pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピングpi-15. カプセル化, MVCモデル, オブジェクトのマッピング
pi-15. カプセル化, MVCモデル, オブジェクトのマッピング
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
Spock's world
Spock's worldSpock's world
Spock's world
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
 
Scala EE 7 Essentials
Scala EE 7 EssentialsScala EE 7 Essentials
Scala EE 7 Essentials
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
Ruby test double
Ruby test doubleRuby test double
Ruby test double
 
Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010
 
Wagby r7javadeveloperbasicguide
Wagby r7javadeveloperbasicguideWagby r7javadeveloperbasicguide
Wagby r7javadeveloperbasicguide
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 

Mais de Oda Shinsuke

Mais de Oda Shinsuke (20)

SQL Server2022_PSPoptimization_pub.pdf
SQL Server2022_PSPoptimization_pub.pdfSQL Server2022_PSPoptimization_pub.pdf
SQL Server2022_PSPoptimization_pub.pdf
 
What's hyperscale
What's hyperscaleWhat's hyperscale
What's hyperscale
 
Dot net+sql server tips
Dot net+sql server tipsDot net+sql server tips
Dot net+sql server tips
 
Sql server 2019 ざっくり紹介
Sql server 2019  ざっくり紹介Sql server 2019  ざっくり紹介
Sql server 2019 ざっくり紹介
 
Spark on sql server?
Spark on sql server?Spark on sql server?
Spark on sql server?
 
SQL Server のロック概要
SQL Server のロック概要SQL Server のロック概要
SQL Server のロック概要
 
Blazor 触ってみた
Blazor 触ってみたBlazor 触ってみた
Blazor 触ってみた
 
Linux + PHP でも SQL Server
Linux + PHP でも SQL ServerLinux + PHP でも SQL Server
Linux + PHP でも SQL Server
 
グラフデータベースの話し
グラフデータベースの話しグラフデータベースの話し
グラフデータベースの話し
 
Sql server 2017 新機能のご紹介
Sql server 2017 新機能のご紹介Sql server 2017 新機能のご紹介
Sql server 2017 新機能のご紹介
 
Sql server 2017 からはじめる graph データベース
Sql server 2017 からはじめる graph データベースSql server 2017 からはじめる graph データベース
Sql server 2017 からはじめる graph データベース
 
Transaction scopeまだダメ
Transaction scopeまだダメTransaction scopeまだダメ
Transaction scopeまだダメ
 
Sql serverと他dbの違いを押さえよう!
Sql serverと他dbの違いを押さえよう!Sql serverと他dbの違いを押さえよう!
Sql serverと他dbの違いを押さえよう!
 
2016年を振り返って
2016年を振り返って2016年を振り返って
2016年を振り返って
 
Sql world とは
Sql world とはSql world とは
Sql world とは
 
開発者の方向けの Sql server(db) t sql 振り返り
開発者の方向けの Sql server(db) t sql 振り返り開発者の方向けの Sql server(db) t sql 振り返り
開発者の方向けの Sql server(db) t sql 振り返り
 
Sql world とは
Sql world とはSql world とは
Sql world とは
 
Ms build 触ってみよう
Ms build 触ってみようMs build 触ってみよう
Ms build 触ってみよう
 
Sql server2014復習とsqlserver2016の紹介
Sql server2014復習とsqlserver2016の紹介Sql server2014復習とsqlserver2016の紹介
Sql server2014復習とsqlserver2016の紹介
 
Sql server sql database 最新機能紹介
Sql server sql database 最新機能紹介Sql server sql database 最新機能紹介
Sql server sql database 最新機能紹介
 

Último

Último (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

BeanValidation