Capisco come aggiungere semplici convalide di form in Play 2 come nonEmptyText
, ma come implementare convalide più complesse come "almeno uno dei campi deve essere definito"? Attualmente lancio un'eccezione nel mio oggetto modello se viene inizializzato con tutti gli None
s, ma questo genera un messaggio di errore sgradevole. Preferirei ricevere un messaggio di errore amichevole nella pagina del modulo.Come specificare convalide di moduli complessi in Play 2?
risposta
È possibile nidificare il mappings
/tuples
nella definizione modulo e aggiungere verifying
norme in materia di mappatura, sub-mapping, tuple e sub-tuple. Quindi nei modelli è possibile recuperare gli errori utilizzando form.errors("fieldname")
per un campo specifico o un gruppo di campi.
Ad esempio:
val signinForm: Form[Account] = Form(
mapping(
"name" -> text(minLength=6, maxLength=50),
"email" -> email,
"password" -> tuple(
"main" -> text(minLength=8, maxLength=16),
"confirm" -> text
).verifying(
// Add an additional constraint: both passwords must match
"Passwords don't match", password => password._1 == password._2
)
)(Account.apply)(Account.unapply)
)
Se si dispone di due diverse password, è possibile recuperare l'errore nel modello utilizzando form.errors("password")
In questo esempio, si dovrà scrivere il proprio Account.apply
e Account.unapply
per gestire (String, String, (String, String))
Cool ma sfortunatamente questo significa anche che Account non può essere una case case. Non penso che le case history possano ridefinire inapplicabile. – schmmd
@schmmd infatti Account.apply è un metodo dell'oggetto companion della classe case -> http://daily-scala.blogspot.fr/2009/09/companion-object.html. Puoi scrivere il tuo. – iwalktheline
Certo, ma il mio problema è 'unapply' non' apply'. – schmmd
In gioco! Framework, puoi mostrare i messaggi di errore amichevoli usando la variabile flash. Hai solo bisogno di scrivere qualcosa del genere;
flash.error("Oops. An error occurred");
al controller. Ad esempio, dove questo messaggio di errore risiederà nella pagina html dovrebbe essere impostato;
<h1>${flash.error}</h1>
Play! Framework metterà il messaggio di errore dove trova questa cosa $ {flash.error}.
Ho migliorato la risposta accettata di @ kheraud. Puoi prendere la tupla e trasformarla in una singola stringa. Ciò consente di utilizzare le funzioni di applicazione/non valida predefinite.
Esempio:
val signinForm: Form[Account] = Form(
mapping(
"name" -> text(minLength=6, maxLength=50),
"email" -> email,
"password" -> tuple(
"main" -> text(minLength=8, maxLength=16),
"confirm" -> text
).verifying(
// Add an additional constraint: both passwords must match
"Passwords don't match", password => password._1 == password._2
).transform(
{ case (main, confirm) => main },
(main: String) => ("", "")
)
)(Account.apply)(Account.unapply)
)
- 1. Disaccoppiare moduli javascript troppo complessi
- 2. Moduli Django: il mantenimento di un campo disabilitato tra convalide
- 3. Errore di visualizzazione in Play Framework 2
- 4. Play development 2 configuration
- 5. Java Play! 2 - Cache.remove
- 6. Lombok with Play 2
- 7. Moduli di ricerca per framework di gioco 2
- 8. Symfony 2 moduli incorporati
- 9. Specificare la porta Play 2.0 con "dist"
- 10. Play Framework 2 Bind da richiesta
- 11. più convalide Rails 3 (Rails per Zombies; 2: 3)
- 12. come specificare i moduli locali come dipendenze del pacchetto npm
- 13. Scaffolding per Play Framework 2
- 14. Play 2 - Scala FakeRequest withJsonBody
- 15. Play Framework 2 Render pdf
- 16. Aggiornamento di modelli complessi in scenari di registrazione di moduli e MVC
- 17. Come saltare le convalide has_secure_password
- 18. Come specificare la posizione di configurazione di Log4J 2.x?
- 19. Come registrare il collegamento http in Play 2
- 20. Come utilizzare OAuth 2 in Play Framework 2.0
- 21. Come pubblicare file caricati in Play! 2 usando Scala?
- 22. Play 2: come confrontare le stringhe in scala template?
- 23. Come costruire un Modulo in play framework 2
- 24. Come funziona la richiesta in Play Framework 2?
- 25. specificare la directory in cui gfortran dovrebbe cercare moduli
- 26. Come specificare 2 chiavi in python ordinate (lista)?
- 27. Sintassi di registrazione per Play Framework 2 in Scala
- 28. Utilizzo di percorsi javascript in Play Framework 2
- 29. Come tradurre le etichette dei moduli in Zend Framework 2?
- 30. Play Framework 2 & requirejs - percorsi non rispettati in dist build
è questa domanda applicabile for Gioca v1 o Play v2 !? – adis