Questo è il primo di una serie di post in cui parlerò di quello che sto facendo all'interno del progetto open source Parancoe.
Parancoe è un'idea che è nata all'interno del Jug Padova per la realizzazione di applicazioni web in Java, se siete interessati o volete partecipare, andate qua.
Uno dei problemi da risolvere è quello della gestione della validazione degli attributi di una classe (ad esempio presenza, lunghezza, ...).
Andando ad analizzare più in dettaglio il problema, il meccanismo di validazione ha i seguenti requisiti:
Siccome uno dei requisiti è l'integrazione con la parte di presentazione, fatta con Spring MVC, chiarisco qui brevemente come funziona il meccanismo di validazione in questa libreria.
Supponiamo di avere una classe Person che contiene una serie di attributi, come il nome è il cognome e supponiamo di voler validare tale classe.
La classe sarà associata ad una form di inserimento e ad un controller che si occupa della
gestione della comunicazione tra model e view.
Spring MVC mette a disposizione l'interfaccia Validator, che fornisce un meccanismo di validazione.
Implementando tale interfaccia in una classe, ad esempio PersonValidator, possiamo in tale classe inserire le nostre regole di validazione.
Definendo tale classe nel file di configurazione della nostra web application possiamo associarla a Person ottenendo due cose:
Riassumendo, i passi da compiere sono:
Questi passi vanno compiuti per ogni classe che deve essere validata.
La libreria Springmodules, mette a disposizione una serie di moduli a corredo del framework Spring.
Uno di questi è spring-modules-validation. Tale modulo fornisce un meccanismo di validazione che sfrutta le annotation e consente di dover scrivere pochissimo codice di configurazione.
Considerando la classe Person, possiamo definire la validazione direttamente sui field della stessa:
import org.springmodules.validation.bean.conf.
loader.annotation.handler.Length;
import org.springmodules.validation.bean.conf.
loader.annotation.handler.NotBlank;
public class Person {
@NotBlank
@Length(min=2,max=10)
private String firstName;
@NotBlank
@Length(min=2,max=20)
private String lastName;
@DateInThePast
private Date birthDate;
}
Le tre annotazioni definite permettono di controllare che:
Non è stato dunque necessario definire una specifica classe di validazione, la classe che compie la validazione, cioè quella che si andrà a leggere le annotazioni presenti in Person, si chiama BeanValidator.
Per configurarla dovremo fare due cose:
class="BeanValidator">
class="AnnotationlBeanValidationConfigurationLoader" />
BeanValidator implementa l'interfaccia Validator di Spring, quindi si integra perfettamente con il meccanismo di segnalazione degli errori di Spring MVC.
Inoltre definisce già una serie di regole di validazioni e permette di crearne di custom.
Inoltre permette di usare i resource bundle tramite alcune convenzioni sui nomi, ad esempio nel caso di Person il resource bundle inglese sarà:
Person.firstName[not.blank]=First Name is required
Person.lastName[not.blank]=Last Name is required
Alla regola NotBlank viene assegnato di default l'id not.blank.
Per particolareggiare il messaggio per i campi, li si qualifica con il nome della classe seguito dal nome del campo.
Per una trattazione più estesa delle proprietà di BeanValidator, rimando alla documentazione ufficiale.
Questo sito pubblica i propri contenuti con licenza Creative Commons.
Per maggiori informazioni andate qua.
Per contattarmi: ![]()
Questo sito è gratuito, e non usa alcun tipo di pubblicità.
Se mi vuoi aiutare a tenerlo vivo, se hai trovato qualcosa di utile, oppure se sei Bill Gates e non sai più dove buttare i soldi, prova a pensare ad una donazione:
Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer
Commenti
Mi pare che la validazione
???????
De cossa che xeo drio
De cossa che xeo drio parlare!
Voialtri ed il vostro Java....
Ma se' proprio bravi pero'!
mah ...java è alla portata
Secondo me la conoscenza di
La laurea in ingegneria è
La laurea in ingegneria è sprecata/inadeguata per il mercato italiano dell'informatica.
Non ti serve a gran chè la teoria dell'NP-completezza, mentre sarebbe stato più utile un corso di ingegneria del software e uno avanzato di basi di dati.
Grande Andrea ti bacio!!!!
Quoto e rilancio con un
Quoto e rilancio con un corso di automazione industriale serio... NON volevo fare il programmatore... Eppure e' una percentuale rilevantissima dela mia gioranta lavorativa...
In realtà la validazione
In realtà la validazione viene messa nella stessa classe dalla quale verrà gestita la persistenza: la classe Person su cui viene fatta la validazione è la stessa in cui viene dichiarata la persistenza (@javax.persistence.Entity())
Si', ma poi il binding lo
In teoria, per come è stato
>scrivere un solo bean con
>scrivere un solo bean con criteri di validazione e persistenza annidati...
Volevo dire annotati.
Domande sulla la soluzione
>2) la configurazone al
>2) la configurazone al punto 2 dipende dall'implementazione di Person in qualche forma? potremmo pensare di autogenerarla?
Si dobbiamo fare una configurazione per ogni bean, sarebbe una bella cosa riuscire ad evitare questa configurazione, magari adottando una naming convention.
Stiamo attenti con le
In questi giorni sono stato
In questi giorni sono stato davvero infognato, non sono riuscito a seguire il thread. Comunque:
mariano: per il punto 1) sì, la configurazione è comune quindi la sipotrebbe piazzare su parancoeBase.xml
enrico: la configurazione con naming convention che suggerivi al punto 2) la si può discutere. Però la mia conoscenza di spring e AOP è abbastanza scarsa ancora...
Ma tosatti, non ste'
Ma tosatti, non ste' drogarve... Non capisco molto di quello che scrivete, il javanese e' proprio complesso..... Almeno per me che non conosco un'ostia di Java.
Aggiungi un commento