17.12.2009
Metadatenbasierte Validierung

             JSR 303 and more...




17.12.2009
DI (FH) Gerhard.Petracek @irian.at
• JCP-Member
  (Bean Validation Expert Group)
• Apache MyFaces
     • Committer
     • ...
Bean-Validation Ökosystem - 1
• Spec.-Lead: Emmanuel Bernard
• EG-Members
      • Internationale Firmen wie
             •...
Bean-Validation Ökosystem - 2
• Implementierungen
      • Hibernate-Validator v4+ (RI)
      • Agimatec-validation (bald b...
Hello Bean-Validation
• Beispiel
     public class Customer {
        @NotNull
        private String firstName;

        ...
Standard Constraints - Übersicht
•    @AssertFalse / @AssertTrue
•    @DecimalMax / @DecimalMin
•    @Digits
•    @Future ...
Feature Tour




17.12.2009
Eigene Constraints Definieren
• Erforderliche Bestandteile:
      • @Constraint (1-n Constraint-Validator(en))
      • Tar...
Constraint-Validatoren
• Implementierung von
     javax.validation.ConstraintValidator
     • initialize
     • isValid
• ...
Error Messages
• Message-Interpolator transformiert
  Nachrichten automatisch
      • Keys
      • Hardcoded
• Beispiel:
 ...
Group-Validation / Partial-Validation
• Default:
  Constraint ist der Default-Gruppe zugeordnet
  (javax.validation.groups...
Reihenfolge bei der Validierung
• Default: keine Reihenfolge
• @GroupSequence ermöglicht die Angabe
  der Reihenfolge
• Re...
Multiple-Constraints
• Via Annotation-Element
  (Array vom Constraint-Typ)
• Beispiel:
  Zuordnung von Constraints zu Roll...
Validation-Payload
• Subset von Validation-Parameter
  (siehe MyFaces ExtVal >= 3. Release)
• javax.validation.Payload
• F...
Graph-Validation
• Wird ein Objekt validiert, dann werden
  referenzierte Objekte mit-validiert, wenn
  @Valid verwendet w...
Class-Level Validation
• Constraint für e. Klasse/Interface
• Wird vererbt aber nicht überschrieben
• Bei der Validierung ...
Constraint-Composition
• Mit Constraints annotierte Constraints
• Wiederverwendung von Constraints
• Violation-Message(s)
...
[DEMO] JSR 303 in Action




17.12.2009
JSR 303 in Web-Applikationen




17.12.2009
Bean-Validation und JSF
• Änderungen in JSF 2.0 für JSR 303
      •      Default Validator
      •      Geändertes Verhalt...
MyFaces Extensions Validator
    Ermöglicht die einfache Umsetzung von
    fortschrittlichen Validierungskonzepten für
   ...
[DEMO] JSR 303 and JSF




17.12.2009
Bean-Validation & MyFaces ExtVal - 1
• MyFaces ExtVal bietet JSR 303
  Integration für alle JSF Versionen
• Integration al...
Bean-Validation & MyFaces ExtVal - 2
• Severity Aware Validation
• Client-side validation in Kombination mit
  MyFaces Tri...
Weitere Details




17.12.2009
JSF-Request-Lifecycle - Validierung

            Faces-                   Apply                    Conversion
            ...
Exkurs: ExtVal im JSF-Lifecycle

                     Apply       Conversion
      Restore                                ...
ExtVal-BV-Integration im JSF-Lifecycle

                Apply        Conversion
      Restore                             ...
Group-Validation mit MyFaces ExtVal
• Via @BeanValidation
  (= typsichere Alternative zu f:validateBean)
• Nur bei Group-V...
@BeanValidation Beispiele
• Group-Validation für alle Seiten, die dieses
  Page-Bean verwenden
     public class HelloWorl...
@ModelValidation
• Diese Validierung erfolgt nach der Phase
  „Update Model Values“
• Validiert wird
      • Base-Objekt d...
@ModelValidation – Fehlermeldungen
• Fehler-Meldungen werden global angezeigt
  (inline ist optional möglich)
• Fehlermeld...
ExtVal-Add-ons für JSR 303 Validation
•    Group-Validation via action-Methoden
•    Transactional model validation
•    C...
Q & A?




17.12.2009
Links
• JSR 303
       – Bean-Validation Specification
         http://jcp.org/en/jsr/detail?id=303
       – MyFaces ExtVa...
Upcoming SlideShare
Loading in...5
×

Metadatenbasierte Validierung

3,644

Published on

Ein Standard für metadatenbasierte Validierung in allen Layern einer Applikation. Mit diesem Versprechen geht der neue Bean-Validation Standard, auch bekannt als JSR 303, ins Rennen. Von der Wiederverwendbarkeit von bestehenden Constraints zum einfacheren Aufbau eigener Constraints bis hin zur Validierung von Objektgraphen bietet diese Spezifikation einige Mechanismen für metadatenbasierte Validierungen. In einer Feature Tour werden die zentralen Bestandteile der Spezifikation vorgestellt.

In einem zweiten Teil wird die Nutzung von metadatenbasierter Validierung in JEE-Webapplikationen gezeigt. Anhand von kurzen Beispielen wird die Rolle von MyFaces Extensions Validator (aka MyFaces ExtVal) bei der Integration von JSR 303 in JSF-Applikationen veranschaulicht.

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
3,644
On Slideshare
0
From Embeds
0
Number of Embeds
29
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Metadatenbasierte Validierung

  1. 1. 17.12.2009
  2. 2. Metadatenbasierte Validierung JSR 303 and more... 17.12.2009
  3. 3. DI (FH) Gerhard.Petracek @irian.at • JCP-Member (Bean Validation Expert Group) • Apache MyFaces • Committer • PMC Member • Project Lead (ExtVal) • Schulungen zu JEE (v.a. JSF) • Autor verschiedener Fachartikel • Vorträge (Software und Web-Engineering) 17.12.2009
  4. 4. Bean-Validation Ökosystem - 1 • Spec.-Lead: Emmanuel Bernard • EG-Members • Internationale Firmen wie • Sun • Oracle • Google • uvm. • Einige Project Leads erfolgreicher Validierungsframeworks • Von Irian Solutions: Gerhard Petracek 17.12.2009
  5. 5. Bean-Validation Ökosystem - 2 • Implementierungen • Hibernate-Validator v4+ (RI) • Agimatec-validation (bald bei Apache SF) • OVal • JSF Support lt. Spec. für JSF 2+ • Adapter für JSF • MyFaces ExtVal BV-Integration-Module (für JSF 1.x und JSF 2+) 17.12.2009
  6. 6. Hello Bean-Validation • Beispiel public class Customer { @NotNull private String firstName; public String getFirstName() { return firstName; } public void setFirstName( String firstName) { this.firstName = firstName; } } 17.12.2009
  7. 7. Standard Constraints - Übersicht • @AssertFalse / @AssertTrue • @DecimalMax / @DecimalMin • @Digits • @Future / @Past • @Max / @Min • @NotNull / @Null • @Pattern • @Size 17.12.2009
  8. 8. Feature Tour 17.12.2009
  9. 9. Eigene Constraints Definieren • Erforderliche Bestandteile: • @Constraint (1-n Constraint-Validator(en)) • Target • FIELD • METHOD • TYPE • ANNOTATION_TYPE (für Constraint composition) • Und natürlich: Retention RUNTIME • Verpflichtende Attribute • message • groups • payload 17.12.2009
  10. 10. Constraint-Validatoren • Implementierung von javax.validation.ConstraintValidator • initialize • isValid • Ist auf ein Constraint und einen Ziel-Typ beschränkt (via Generics) • Ein Constraint kann für mehrere Ziel-Typen verwendet werden • Bsp.: @Size für String, Array, Map, … 17.12.2009
  11. 11. Error Messages • Message-Interpolator transformiert Nachrichten automatisch • Keys • Hardcoded • Beispiel: @Size(min = 1, max = 10, message = "{firstName.lengthMessage}") Resource-Bundle: firstName.lengthMessage = Name must be between {min} and {max} 17.12.2009
  12. 12. Group-Validation / Partial-Validation • Default: Constraint ist der Default-Gruppe zugeordnet (javax.validation.groups.Default) • Gruppen sind Interfaces und somit typesafe • Ermöglicht Validierung impliziter Gruppen • Beispiel: @NotNull entspricht @NotNull(groups = Default.class) 17.12.2009
  13. 13. Reihenfolge bei der Validierung • Default: keine Reihenfolge • @GroupSequence ermöglicht die Angabe der Reihenfolge • Rechenintensive Gruppen sollen am Ende validiert werden • Validierung einer Gruppe findet statt, wenn die vorherige Gruppe fehlerfrei validiert wurde 17.12.2009
  14. 14. Multiple-Constraints • Via Annotation-Element (Array vom Constraint-Typ) • Beispiel: Zuordnung von Constraints zu Rollen (via Group-Validation) @Size.List({ @Size(groups = Default.class min = 10, max = 20), @Size(groups = AdminGroup.class min = 1, max = 30) }) 17.12.2009
  15. 15. Validation-Payload • Subset von Validation-Parameter (siehe MyFaces ExtVal >= 3. Release) • javax.validation.Payload • Für Validation-Clients wie MyFaces ExtVal nutzbar – bspw.: Severity.Warn.class • Beispiel: public class Severity { public static class Warn implements Payload {} public static interface Error extends Payload {} } 17.12.2009
  16. 16. Graph-Validation • Wird ein Objekt validiert, dann werden referenzierte Objekte mit-validiert, wenn @Valid verwendet wird • Auch Inhalte von Collections und Arrays • Keine Validierung erfolgt, wenn Lazy- Properties noch nicht geladen wurden 17.12.2009
  17. 17. Class-Level Validation • Constraint für e. Klasse/Interface • Wird vererbt aber nicht überschrieben • Bei der Validierung liegt das aktuelle Objekt im gesamten vor • In JSF nur mit MyFaces ExtVal 17.12.2009
  18. 18. Constraint-Composition • Mit Constraints annotierte Constraints • Wiederverwendung von Constraints • Violation-Message(s) • Default: Messages der einzelnen Constraints • Mit @ReportAsSingleViolation wird die Error-Message des Haupt-Constraints angezeigt 17.12.2009
  19. 19. [DEMO] JSR 303 in Action 17.12.2009
  20. 20. JSR 303 in Web-Applikationen 17.12.2009
  21. 21. Bean-Validation und JSF • Änderungen in JSF 2.0 für JSR 303 • Default Validator • Geändertes Verhalten v. required-Attribut • ValidatorException mit mehreren Messages • Verschiedene Konfigurationsparameter • Spezieller Tag (validiert Default-Gruppe): <f:validateBean/> • Beispiele: • Validierung der Default Group • Group-Validation <f:validateBean validationGroups = "at.irian.demo.validation.groups.Order"/> 17.12.2009
  22. 22. MyFaces Extensions Validator Ermöglicht die einfache Umsetzung von fortschrittlichen Validierungskonzepten für JSF-Applikationen auf Basis von dynamischen Metadaten. 17.12.2009
  23. 23. [DEMO] JSR 303 and JSF 17.12.2009
  24. 24. Bean-Validation & MyFaces ExtVal - 1 • MyFaces ExtVal bietet JSR 303 Integration für alle JSF Versionen • Integration als unabhängiges Validation-Module • Group-Validation erfolgt via Annotation • Definition (norm.) auf Page-Bean-Level • Compile-time check + IDE Support • Support für Model-Validation • Sorted violation messages • DI Support für Constraint-Validatoren 17.12.2009
  25. 25. Bean-Validation & MyFaces ExtVal - 2 • Severity Aware Validation • Client-side validation in Kombination mit MyFaces Trinidad • Group Storage (ermöglicht die Speicherung von Validation- Groups in unterschiedlichen Quellen) • Validation Interception • Validation Exception Intercepetion • Einige Add-ons 17.12.2009
  26. 26. Weitere Details 17.12.2009
  27. 27. JSF-Request-Lifecycle - Validierung Faces- Apply Conversion Restore Process request Request and View Events Values Validation Process events CLIENT Update Model Faces- response Render Process Invoke Process Response Events Application Events Validation / Conversion Errors Render Response 17.12.2009
  28. 28. Exkurs: ExtVal im JSF-Lifecycle Apply Conversion Restore Update Invoke Render Request and Application View Model Response Values Validation ExtVal ExtVal Std. JSF Cross- Validation Validation Validation 17.12.2009
  29. 29. ExtVal-BV-Integration im JSF-Lifecycle Apply Conversion Restore Update Invoke Render Request and Application View Model Response Values Validation ExtVal-BV ExtVal-BV Std. JSF Model Validation Validation Validation 17.12.2009
  30. 30. Group-Validation mit MyFaces ExtVal • Via @BeanValidation (= typsichere Alternative zu f:validateBean) • Nur bei Group-Validation (und Model Validation) • Möglichkeiten • Simple Angabe von Gruppen • Einschränkung auf View-IDs • Bedingungen via EL-Expression definieren • Gruppen herausfiltern 17.12.2009
  31. 31. @BeanValidation Beispiele • Group-Validation für alle Seiten, die dieses Page-Bean verwenden public class HelloWorldController { @BeanValidation(useGroups = User.class) private Person person = new Person(); … } • Group-Validation nach Seiten unterscheiden @BeanValidation.List({ @BeanValidation(viewIds = "/page1.xhtml", useGroups = User.class), @BeanValidation(viewIds = "/page2.xhtml", useGroups = Admin.class) }) public class HelloWorldController { private Person person = new Person(); … } 17.12.2009
  32. 32. @ModelValidation • Diese Validierung erfolgt nach der Phase „Update Model Values“ • Validiert wird • Base-Objekt der Property (Default) • Andere Objekte (via EL-Expression) • Rollback via Add-on möglich • Beispiel: @BeanValidation(modelValidation = @ModelValidation(isActive = true)) 17.12.2009
  33. 33. @ModelValidation – Fehlermeldungen • Fehler-Meldungen werden global angezeigt (inline ist optional möglich) • Fehlermeldungen können bei Bedarf überschrieben werden 17.12.2009
  34. 34. ExtVal-Add-ons für JSR 303 Validation • Group-Validation via action-Methoden • Transactional model validation • Continue with warnings • Bypass BV • Tag als Alternative zu @BeanValidation • ... 17.12.2009
  35. 35. Q & A? 17.12.2009
  36. 36. Links • JSR 303 – Bean-Validation Specification http://jcp.org/en/jsr/detail?id=303 – MyFaces ExtVal (BV-Integration) http://myfaces.apache.org/ http://wiki.apache.org/myfaces/Extensions/Validator/ • Specification implementations – http://www.hibernate.org/412.html – http://oval.sourceforge.net – http://code.google.com/p/agimatec-validation/ • Trainings & Support (ExtVal und/oder BV) – http://www.irian.at/extval/ 17.12.2009

×