Your SlideShare is downloading. ×
0
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Declarative input validation with JSR 303 and ExtVal
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Declarative input validation with JSR 303 and ExtVal

2,470

Published on

Slides of my session at J-Fall 2010

Slides of my session at J-Fall 2010

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,470
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. WWW.TRANSFER-SOLUTIONS.COM SPREKER : E-MAIL : DATUM : Declarative input validation with JSR 303 and ExtVal BART KUMMEL BKUMMEL@TRANSFER-SOLUTIONS.COM 3 NOVEMBER 2010
  2. © COPYRIGHT TRANSFER SOLUTIONS B.V. 2 Who am I? Bart Kummel Nearly 10 years experience in software development Of which 5 years in Java EE Consultant @ Transfer Solutions Competence Manager Java EE @ Transfer Solutions Author of Apache MyFaces 1.2 Web Application Development See http://tinyurl.com/am12wad
  3. © COPYRIGHT TRANSFER SOLUTIONS B.V. 3Photo: Salar de Uyuni, Bolivia; © 2010 by Bart KummelPhoto: Salar de Uyuni, Bolivia; © 2010 by Bart Kummel
  4. © COPYRIGHT TRANSFER SOLUTIONS B.V. 4 Don’t Repeat Yourself Less code = less bugs Duplicated code = duplicated bugs Duplicated code = duplicated maintenance Dupliacted maintenance = forgotten maintenance
  5. © COPYRIGHT TRANSFER SOLUTIONS B.V. 5 DRY violations in classic Java EE apps Validation is programmed in Model beans Because that’s where it belongs Validation is repeated in View layer Because you have to use JSF Validators Validation is even repeated multiple times in the View Because the same bean is used in multiple JSF pages
  6. © COPYRIGHT TRANSFER SOLUTIONS B.V. 6 Remove validation code from View Let View generate validation based on Model Let’s fix this How to fix it? That’s why Bean Validation (JSR 303) was created
  7. © COPYRIGHT TRANSFER SOLUTIONS B.V. 7 JSR 303: the idea Standardized way to express validation constraints Any UI technology can interpret those constraints and enforce them Non-UI technologies can also use the validation information
  8. © COPYRIGHT TRANSFER SOLUTIONS B.V. 8 JSR 303: the idea implemented JSR 303 is part of Java EE 6 The reference implementation is Hibernate Validator 4.* See http://hibernate.org/subprojects/validator.html Hibernate Validator 4.* can also be used in Java EE 5 A JSR 303 implementation is only the way to express the validation constraints You don’t get UI validation logic if the UI framework doesn’t support JSR 303
  9. © COPYRIGHT TRANSFER SOLUTIONS B.V. 9 Bean Validation in Java EE 5 Add Hibernate Validator 4.* as library ...and some extra libraries, provided in the Hibernate Validator package Use JSR 303 annotations in your beans Use MyFaces ExtVal 1.2.* to add declarative validation support to JSF 1.2
  10. © COPYRIGHT TRANSFER SOLUTIONS B.V. 10 Bean Validation in Java EE 6 No need to add a JSR 303 implementation JSR 303 is part of the Java EE 6 platform Use JSR 303 annotations in your beans JSF 2.0 has support for JSR 303 annotations out of the box But support is limited You can (and should!) still use ExtVal (2.0.*) and get lots of benefits (more on that later)
  11. © COPYRIGHT TRANSFER SOLUTIONS B.V. 11 Side note: ExtVal versioning There are three current versions of ExtVal 1.1.* for JSF 1.1 1.2.* for JSF 1.2 2.0.* for JSF 2.0 The latest stable release is release 3 That is: 1.1.3, 1.2.3 and 2.0.3 Lots of exciting new stuff is going into the next version Snapshot releases of ExtVal are very high quality
  12. © COPYRIGHT TRANSFER SOLUTIONS B.V. 12 Example: classic validation code in bean @Min(0) @Max(100000) private int capacity; public void setCapacity(int capacity) { if(capacity >= 0 && capacity <= 100000) { this.capacity = capacity; } else { // throw exception } }
  13. © COPYRIGHT TRANSFER SOLUTIONS B.V. 13 Example: JSR 303 annotations @Min(0) @Max(100000) private int capacity; public void setCapacity(int capacity) { this.capacity = capacity; } Extra benefits: – less code – better readable
  14. © COPYRIGHT TRANSFER SOLUTIONS B.V. 14 Example: classic validation in JSF page <h:inputText value="#{room.capacity}" > <f:validateLongRange minimum = "0" maximum = "100000" /> </h:inputText>
  15. © COPYRIGHT TRANSFER SOLUTIONS B.V. 15 Example: no validation in JSF page! <h:inputText value="#{room.capacity}" /> Benefits: – less code – DRY!
  16. 16 WWW.TRANSFER-SOLUTIONS.COM Demo 1: Bean Validation basics in Java EE 6
  17. © COPYRIGHT TRANSFER SOLUTIONS B.V. 17 So why do we need ExtVal? To use Bean Validation in Java EE 5 / JSF 1.2 To have advanced options in Java EE 6
  18. © COPYRIGHT TRANSFER SOLUTIONS B.V. 18 ExtVal on Java EE 6: advanced options Cross validation Violation severity i.o.w. give warnings instead of errors More flexibility in choice of annotations to use JSR 303, JPA, ExtVal, own annotation or any combination Customization on all levels, e.g.: Custom message resolvers Custom validation strategies Custom meta data demos coming up!
  19. © COPYRIGHT TRANSFER SOLUTIONS B.V. 19 Configuring ExtVal Just add the ExtVal .jar files to your project
  20. 20 WWW.TRANSFER-SOLUTIONS.COM Demo 2: Adding the ExtVal .jar files to our project
  21. © COPYRIGHT TRANSFER SOLUTIONS B.V. 21 Cross validation Examples of cross validation check if two values are equal check if date is before or after other date value is only required if other value is empty (or not) etcetera...
  22. 22 WWW.TRANSFER-SOLUTIONS.COM Demo 3: Cross validation
  23. © COPYRIGHT TRANSFER SOLUTIONS B.V. 23 Demo 3 – Summary @DateIs can be used for date-related cross validations Use DateIsType.before, DateIsType.after or DateIsType.same Other cross validation annotations: @Equals and @NotEquals for equality-based cross validation of any type @RequiredIf for conditional required fields Use RequiredIfType.empty or RequiredIfType.not_empty
  24. © COPYRIGHT TRANSFER SOLUTIONS B.V. 24 Violation severity Give certain validation rules a severity level of “warning” A warning will be given to the user, but “invalid” data can be submitted
  25. 25 WWW.TRANSFER-SOLUTIONS.COM Demo 4: Setting violation severity to “warning”
  26. © COPYRIGHT TRANSFER SOLUTIONS B.V. 26 Demo 4 – summary Violation severity is not part of the JSR 303 standard We use payload to add violation severity level as custom meta data JPA also interprets JSR 303 contraints before persisting data, but does not recognise violation severity Solution: use ExtVal annotations instead
  27. © COPYRIGHT TRANSFER SOLUTIONS B.V. 27 Customization on all levels ExtVal is full of customization hooks A lot of ready-made add-ons are available see http://os890.blogspot.com
  28. 28 WWW.TRANSFER-SOLUTIONS.COM Demo 5: Creating a custom annotation and a custom validation strategy
  29. © COPYRIGHT TRANSFER SOLUTIONS B.V. 29 Demo 5 – summary Technically, creating a custom annotation is not an ExtVal feature It is just a Java feature We need an ExtVal validation strategy to make a custom annotation work We need to map our annotation to our validation strategy We can create a startup listener for this As an alternative we can use ExtVal plugins to use alternative ways of configuration
  30. © COPYRIGHT TRANSFER SOLUTIONS B.V. 30 Summary With annotation based valition, we can finally create DRY JSF applications ExtVal gives us the opportunity to use annotation-based validation on Java EE 5 On Java EE 6, ExtVal gives us: More powerful annotation-based validation More flexibility
  31. © COPYRIGHT TRANSFER SOLUTIONS B.V. 31 More info... I will put links to slides & demo code on my blog http://www.bartkummel.net Chapter 10 of MyFaces 1.2 Web Application Development http://tinyurl.com/am12wad MyFaces ExtVal: http://myfaces.apache.org/extensions/validator http://os890.blogspot.com/
  32. © COPYRIGHT TRANSFER SOLUTIONS B.V. 32 &Q u e s t i o n s A n s w e r s CONSULTING | MANAGED SERVICES | EDUCATION WWW.TRANSFER-SOLUTIONS.COM

×