si può ottenere una migliore comprensione di esso verifica Form's sourcecode here
Form
definisce un metodo di applicare:
def apply(key: String): Field = Field(
this,
key,
constraints.get(key).getOrElse(Nil),
formats.get(key),
errors.collect { case e if e.key == key => e },
data.get(key))
Che, come detto nel documento, restituisce qualsiasi campo, anche se non esiste . E un Field
ha un errors
membro che restituisce un Seq[FormError]
:
Quindi, si potrebbe fare qualcosa di simile (per la Seq[FormError]
):
eventForm("name").errors.foreach { error =>
<div>@error.message</div>
}
Or (per la Option[FormError]
)
eventForm("name").error.map { error =>
<div>@error.message</div>
}
Oppure, è possibile utilizzare Form
errors
:
def errors(key: String): Seq[FormError] = errors.filter(_.key == key)
E ottenere tutti gli errori di una determinata chiave. Ti piace questa (per la Seq[FormError]
):
eventForm.errors("name").foreach { error =>
<div>@error.message</div>
}
Or (per la Option[FormError]
)
eventForm.error("name").map { error =>
<div>@error.message</div>
}
Se volete maggiori dettagli, controllare il codice sorgente. È ben scritto e ben commentato.
Cheers!
EDIT:
Come biesior commentato: per mostrare umani graziose messaggi leggibili con diverse lingue che si controlla come funziona il gioco I18N fuori here
Per essere approfondita probabilmente stai andando ad avere per trattare con I18N. Non è affatto difficile far funzionare tutto. Dopo aver letto il documentation potresti ancora trovarti un po 'consussato. Ti darò una piccola spinta.Aggiungi un file messages
alla tua cartella conf
ed è possibile copiarne il contenuto da here. In questo modo avrai più controllo sui messaggi predefiniti. Ora, a suo avviso, si dovrebbe essere in grado di fare qualcosa di simile:
eventForm.errors("name").foreach { error =>
<div>@Messages(error.message, error.args: _*)</div>
}
Per esempio, se fosse error.message
error.invalid
sarebbe mostrare il messaggio precedentemente definito nel file di conf/messages
Invalid value
. args
definisce alcuni argomenti che il tuo messaggio di errore può gestire. Ad esempio, se gestissi uno error.min
, un valore di arg
potrebbe essere il valore minimo richiesto. Nel tuo messaggio devi solo seguire lo schema {n}
, dove n è l'ordine del tuo argomento.
Naturalmente, siete in grado di definire i propri messaggi del genere:
error.futureBirthday=Are you sure you're born in the future? Oowww hay, we got ourselves a time traveler!
E nel vostro controller si potrebbe verificare il modulo del genere (una sola riga di codice per mostrare la sensazione di esso)
"year" -> number.verifying("error.furtureBirthday", number <= 2012) // 2012 being the current year
Se si vuole giocare con le lingue, basta seguire la documentazione.
Cheers, ancora!
Proprio punta, ovviamente per la visualizzazione di un messaggio leggibile dovrebbe essere usato come ''
Yeap, I18N è un'altra storia – wleao
quindi credo che in realtà bisogno di imparare Scala a utilizzare la riproduzione. wleao, i tuoi esempi hanno funzionato. Ho dovuto usare @Messages (error.message) per ottenere un messaggio leggibile dall'uomo, come diceva Biesior. – Brian