Come si crea un validatore personalizzato usando Play Framework 2.0?
In Play 2.0, il framework di validazione si estende oltre l’effettiva convalida dei dati quando raggiunge:
Annotazioni – per dichiarare facilmente i contraffatti di validazione usando il segno ‘@’
Validatori – che in realtà implementano la logica dietro la convalida
Messaggi – per visualizzare i messaggi di errore parametrici (conforms a i18)
Infine, helper HTML – che incollano tutti i precedenti insieme
Gli helper HTML sono qualcosa di nuovo per Play 2.0. In 1.x, Play era già abbastanza bravo nell’implementare un framework di convalida ben definito. Era potente e facile da usare. Eppure dovevamo ancora colbind il modulo HTML e il framework di validazione insieme. Questo potrebbe essere un po ‘di confusione per il principiante.
Con Play 2.0, questo è ora fatto automaticamente.
Ma concentriamoci sulla risposta e forniamo alcune indicazioni: Creeremo un validatore AllUpperCase , che genera un errore quando:
l’input non è una stringa
l’input è vuoto
uno dei personaggi è in minuscolo.
Il validatore
package myvalidators; import javax.validation.*; public class AllUpperCaseValidator extends play.data.validation.Constraints.Validator
La prima cosa che potresti notare è l’importazione: Play 2.0 è effettivamente conforms a JSR 303 – Bean Validation Framework. In questo contesto, il validatore deve implementare ConstraintValidator . Che nel nostro caso si traduce AllUpperCase come class AllUpperCase (che introdurremo in un minuto) e T come un Object generico.
Il validatore è diretto: Abbiamo definito il metodo public boolean isValid (Object object) che restituisce un valore booleano, se true ha superato la convalida. C’è anche un ID messaggio e un metodo che instaza il validatore.
L’annotazione
La class seguente definisce un’annotazione chiamata @AllUpperCase che non accetta parametri ma applica la convalida definita in precedenza. Fornire dettagli relativi al framework di annotazioni non rientra nell’ambito di questo post.
Nota come l’anotazione si incolla agli altri pezzi del puzzle.
@Constraint , un’annotazione JSR 303, collegamenti al validatore
@play.data.Form.Display , collega l’annotazione agli helper html di gioco. Si noti che il nome è importante: stiamo definendo un vincolo denominato alluppercase . Play utilizza queste informazioni per chiamare il metodo public static play.data.validation.Constraints.Validatoralluppercase() sul Validator.
Infine, si noti che il messaggio predefinito è impostato nell’interfaccia di annotazione.
uso
Ora abbiamo il nostro validatore personalizzato e annotazione
import myvalidators.*; public static class MyData { @AllUpperCase public String name; }
Descrivere l’utilizzo non rientra nell’ambito di questo post, per favore trova un esempio funzionante a questo URL