2013-07-08 19 views
5

Oyunda ilginç bir şey buldum! çerçeveler doğrulama formu. Örneğin böyle bir form vardır:Scala Oynat form onaylama: gerekli boolean zorunlu değil

case class Foo(mystring: String, myint: Int, mybool: Boolean) { // doing cool stuff here } 
val myForm = Form(
    mapping(
     "mystring" -> text, 
     "myint" -> number, 
     "mybool" -> boolean 
)(Foo.apply)(Foo.unapply)) 

benim Json, doğrulama geçiş içinde mevcut "myBool" olmadan veri bağlanması ve "myBool = yanlış" ile bir nesne oluşturur ediyorum. Bu oldukça garip bir davranış, sanki aynı verileri geçecekmişim gibi, ama "mistring" alanı olmadan, alanın eksik olduğunu görmeyi umduğum Validation Errors: Map(mystring -> error.required) alacağım.

Ben boolean alan isteğe yapıyorum ama elle böyle kontrolün eklenmesi olsam:

Validation Errors: Map(mybool -> mybool.required) 
: Ben beklenen hata alıyorum alanda olmadan veri

"mybool" -> optional(boolean).verifying("mybool.required", _.isDefined) 

Ve bağlamak

Örnek veri kümesi:

{ 
    "mystring": "stringHere", 
    "myint": 33 
} 

Neden gerekli onay Boolean için çalışmıyor? Bunun için en iyi çözüm nedir? Bu bir oyun mu? Hata ya da sadece bir şey anlamıyorum?

Yanıtlarınız için teşekkürler.

cevap

3

Bunu tasarımla hayal ediyorum. Tipik olarak bir boole alanınız varsa, bunu bir HTML onay kutusuna bağlayabilirsiniz. Form gönderildiğinde kutu işaretliyse, tüm beklendiği gibi çalışır; Ancak, kutu işaretlenmemişse, tarayıcılar alan adını gönderilen verilerle birlikte göndermez. Temel olarak, kontrol edilmeyen bir kutu ile mevcut olmayan eleman arasında fark yoktur, bu nedenle Oyun, (boole alanları için) değerin "yanlış" olduğunu varsaymalıdır.

+1

Cevabınız için teşekkür ederiz. Bir açıklama gibi geliyor. Muhtemelen yanlıştır, HTML formlarından değil, API'den gelen gelen verilerimi bağlamak için formları kullanıyorum. Şimdilik geçici çözüm, isteğe bağlı boolean ve manuel kontrol ile kullanacağım. – psisoyev

+0

İhtiyacınız olan şeylerin çoğunu yaparsa, Play'in Formlarını kullanarak, verilerin bir form gönderiminden mi yoksa bir API isteği olarak mı geldiğiyle ilgili hiçbir sorun görmüyorum. Scala'ya çok aşina olmadığımı söylemeliyim, bu yüzden istediğiniz şeyi yapmanın bazı yerleşik yolları olabilir, ancak bazen kendi kişisel doğrulamanızı yapmak gerekir. – estmatic

İlgili konular