2012-12-22 5 views
7

Wie kann ich einen Validierungsfehler für ein Formularfeld außerhalb eines Feldkonstruktors in Play framework 2 anzeigen? Hier ist, was ich versucht:Wie kann ich einen Validierungsfehler außerhalb des Feldkonstruktors im Play Framework 2 ausgeben?

@eventForm.("name").error.message 

Und ich bekomme diese Fehlermeldung:

value message is not a member of Option[play.api.data.FormError] 

Ich bin verwirrt, weil in der api docs sagt Nachricht Mitglied FormError ist. Auch das funktioniert gut für globale Fehler:

@eventForm.globalError.message 

Antwort

7

Sie können ein besseres Verständnis davon bekommen Überprüfung Form's sourcecode here

Form ein Verfahren anwenden definiert:

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)) 

Das ist, wie in der doc sagte, gibt ein beliebiges Feld, auch wenn es nicht vorhanden ist . Und ein Field hat ein errors Element, das gibt einen Seq[FormError]:

Also, Sie so etwas tun könnte (für die Seq[FormError]):

eventForm("name").errors.foreach { error => 
    <div>@error.message</div> 
} 

oder (beim Option[FormError])

eventForm("name").error.map { error => 
    <div>@error.message</div> 
} 

Oder Sie könnten Formerrors:

verwenden 0

Und erhalten Sie alle Fehler eines bestimmten Schlüssels. Wie dies (für die Seq[FormError]):

eventForm.errors("name").foreach { error => 
     <div>@error.message</div> 
} 

Oder (für die Option[FormError])

eventForm.error("name").map { error => 
      <div>@error.message</div> 
} 

Wenn Sie weitere Informationen wünschen, überprüfen Sie den Quellcode. Es ist gut geschrieben und gut kommentiert.

Prost!

EDIT:

Wie biesior kommentiert: Menschen lesbare ziemlich Nachrichten mit unterschiedlichen Sprachen zu zeigen, Sie überprüfen müssen, wie L18N Spiel funktioniert here aus

gründlich zu sein sind Sie wahrscheinlich zu haben gehen mit I18N umgehen. Es ist überhaupt nicht schwer, alles zum Laufen zu bringen. Nach dem Lesen der documentation können Sie immer noch ein wenig Consufed finden. Ich gebe dir einen kleinen Stoß.Fügen Sie Ihrem Ordner conf eine messages-Datei hinzu, und Sie können seinen Inhalt von here kopieren. Auf diese Weise haben Sie mehr Kontrolle über die Standardnachrichten. Nun, aus Ihrer Sicht, sollten Sie in der Lage sein, so etwas zu tun:

eventForm.errors("name").foreach { error => 
      <div>@Messages(error.message, error.args: _*)</div> 
} 

Zum Beispiel, wenn error.message waren error.invalid würde es zeigt die Nachricht zuvor definiert in der conf/messages Datei Invalid value. args Definieren Sie einige Argumente, mit denen Ihre Fehlermeldung umgehen kann. Wenn Sie z. B. mit error.min arbeiten, kann ein arg der Mindestwert sein. In Ihrer Nachricht müssen Sie nur dem {n} Muster folgen, wobei n die Reihenfolge Ihres Arguments ist.

Natürlich sind Sie in der Lage Ihre eigenen Nachrichten so zu definieren:

error.futureBirthday=Are you sure you're born in the future? Oowww hay, we got ourselves a time traveler! 

Und in Ihrem Controller können Sie Ihre Form überprüfen wie die (nur eine Zeile Code Sie das Gefühl, es zu zeigen)

"year" -> number.verifying("error.furtureBirthday", number <= 2012) // 2012 being the current year 

Wenn Sie mit Sprachen herumspielen möchten, folgen Sie einfach der Dokumentation.

Prost, wieder!

+1

Gerade Spitze, natürlich für den Menschen lesbaren Nachricht angezeigt sollte es als ''

@Messages(error.message)
statt ''
@error.message
biesior

+0

Yeap verwendet werden, L18N ist eine andere Geschichte – wleao

+0

So scala Ich denke, ich muss wirklich lernen Spiel zu verwenden. wleao, deine Beispiele haben funktioniert. Ich musste @Messages (error.message) verwenden, um eine menschlich lesbare Nachricht zu erhalten, wie Biesior sagte. – Brian

3

wie Sie selbst gesagt, message ist Mitglied der FormError, aber Sie haben eine Option[FormError]. Sie könnten

eventForm("name").error.map(_.message).getOrElse("") 

verwenden, die die Meldung gibt, wenn ein Fehler auftritt, und "", wenn es nicht ist.

Verwandte Themen