2013-07-08 14 views
5

Ho trovato una cosa interessante in Play! convalida forma quadro. Per esempio io ho tale forma:Convalida del formato Scala Play: obbligatorio booleano non obbligatorio

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

Quando sto associazione dati senza "myBool" presente nei miei JSON, passaggi di validazione e crea un oggetto con "myBool = false". Questo è un comportamento abbastanza strano, come se passassi gli stessi dati, ma senza il campo "mystring" otterrò Validation Errors: Map(mystring -> error.required) che mi aspetto di vedere - poiché manca il campo.

Se sto facendo il campo booleano facoltativo, ma sto aggiungendo manualmente tale verifica:

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

e associare i dati senza il campo sto ottenendo l'errore previsto:

Validation Errors: Map(mybool -> mybool.required) 

dati esempio dato:

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

Perché richiesta di controllo non funziona per booleano? Qual è la soluzione migliore per questo? È un gioco! bug o semplicemente non capisco qualcosa?

Grazie per le vostre risposte.

risposta

3

Immagino che sia di progettazione. In genere, se si dispone di un campo booleano, è necessario associarlo a una casella di controllo HTML. Se la casella è selezionata quando il modulo viene inviato, tutto funziona come previsto; tuttavia, se la casella non è selezionata, i browser non inviano il nome del campo con i dati inviati. Fondamentalmente, non c'è differenza tra una casella deselezionata e l'elemento non esistente, quindi Play deve presupporre (per i campi booleani) che il valore sia "falso".

+1

Grazie per la risposta. Sembra una spiegazione. Quindi probabilmente non è corretto, sto usando i moduli per legare i miei dati in arrivo, che provengono da API, non da moduli HTML. Per ora userò la soluzione alternativa con controllo booleano e manuale opzionale. – psisoyev

+0

Se fa la maggior parte di ciò che ti serve, non vedo alcun problema con l'utilizzo di Play's Forms se i dati provengono da un invio di moduli o come una richiesta API. Dovrei dire che non ho molta familiarità con Scala, quindi potrebbe esserci un modo integrato di fare quello che vuoi, ma a volte è necessario fare la tua verifica personalizzata. – estmatic

Problemi correlati