2012-12-22 13 views
7

Yürütme çerçevesi 2'deki bir alan yapıcısının dışındaki bir form alanı için bir doğrulama hatası nasıl gösterilebilir? İşte denedim budur:Yürütme çerçevesi içinde alan yapıcısı dışında doğrulama hatası nasıl yazdırılır

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

Ve bu hatayı alıyorum: api docs içinde mesajın FormError üyesidir diyor çünkü

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

kafam karıştı. Ayrıca bu küresel hatalar için çalışıyor:

@eventForm.globalError.message 

cevap

7

Sen Form's sourcecode here

Form bir yöntem uygulamak tanımlar denetleme bunun daha iyi bir kavrayışa elde edebilirsiniz . Eğer (Seq[FormError] için) böyle bir şey yapabileceğini, Yani

:

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

Ya (için Option[FormError])

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

Ve Field bir Seq[FormError] döndüren bir errors üyesi var Ya da, Formerrors:

Ve belirli bir anahtarın tüm hatalarını alın. Bu (Seq[FormError] için) gibi: (Option[FormError] için)

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

Yoksa daha fazla ayrıntı istiyorsanız

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

, kaynak kodunu kontrol edin. İyi yazılmış ve iyi yorumlanmış.

Şerefe!

DÜZENLEME: As

biesior yorumladı: yürütme muhtemelen etmek zorunda gidiyoruz eksiksiz olması için here

i18n dışarı nasıl çalıştığını kontrol etmek zorunda farklı dillerle insan okunabilir güzel mesajları göstermek için I18N ile anlaşma. Her şeyin işe yaraması hiç de zor değil. documentation'u okuduktan sonra, kendinize biraz uydurulmuş bulabilirsiniz. Sana biraz itme yapacağım.Bir messages dosyasını conf klasörüne ekleyin ve içeriğini here'dan kopyalayabilirsiniz. Bu şekilde varsayılan mesajlar üzerinde daha fazla kontrole sahip olacaksınız. Örneğin

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

error.messageerror.invalid olsaydı mesajı daha önce conf/messages dosyasında Invalid value tanımlanan görünür: Şimdi, görünümde, böyle bir şey yapmak mümkün olmalıdır. args, hata iletinizin işleyebileceği bazı bağımsız değişkenleri tanımlar. Örneğin, bir error.min ile çalışıyorsanız, gereken en düşük değer arg olabilir. Mesajınızda, sadece argümanınızın sırasının olduğu {n} modelini izlemeniz yeterlidir.

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

Ve o kod (sadece bir satır bunun hissini göstermek gibi controller içerisinde Formunuzu kontrol edebilir: Elbette

, böyle kendi mesajları tanımlamak mümkün olacaktır

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

Dilleri etrafta oynamak istiyorsanız, belgeleri takip etmeniz yeterlidir.

Tekrar alkış! Tabii

+1

Sadece ucu, insan okunabilir mesaj görüntülemek için bunu 'yerine'

@error.message
' – biesior

+0

Yeap, I18N – wleao

+0

Yani ben aslında oyun kullanmayı scala öğrenmek gerekiyor galiba başka hikaye değildir

@Messages(error.message)
' olarak kullanılmalıdır. Wleao, örneklerin çalıştı. Ben biesior dediği gibi, insan okunabilir bir mesaj almak için @Messages (error.message) kullanmam gerektiğini söyledim. – Brian

3

Kendin söyledin, messageFormError üyesidir, ancak bir Option[FormError] var. yoksa sen

eventForm("name").error.map(_.message).getOrElse("") 
bir hata varsa, size mesaj veriyor

ve "" kullanabilirsiniz. böyle bir şey yok olsa bile, hem doc açıklamada, bu

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

, herhangi bir alanı verir:

İlgili konular