2013-01-12 22 views
10

Prima di tutto voglio dire che penso che la documentazione di Play per 2.0 sia davvero, molto male.Errore di visualizzazione in Play Framework 2

Sto cercando un modo per inserire un errore di convalida sotto una selezione HTML come la riproduzione lo farebbe per una casella di input generata automaticamente.

Ho provato a copiare la struttura del codice HTML risultante di una casella di input di riproduzione, ma sono sicuro che mi manca qualche riga di modello ifError-Scala nel mio codice HTML.

In caso contrario, non è possibile trovare la documentazione di Play 2.0 per argomenti già trattati nella documentazione di Play < 2.0. Quindi ti atterrai sulla documentazione vecchia, non funzionante, se stai cercando una soluzione nei documenti. Molto frustrante!

+0

L'ultima documentazione di play2.1 è qui http://play2-docs-snapshot.herokuapp.com/render/master/Home. Questa documentazione è su github, ogni ramo/tag ha il suo doc https://github.com/playframework/Play20/tree/master/documentation –

+4

Sì, la documentazione è assolutamente orribile – SobiborTreblinka

risposta

16

Io uso questo codice per visualizzare una casella di avviso bootstrap globale della maschera:

@if(form.hasErrors) { 
    <div class="alert alert-error"> 
     <a class="close" data-dismiss="alert">x</a> 
     @if(form.errors.size() > 0) { 
      @for((key, value) <- form.errors) { 
       @key.toString() : 
        @for(err <- value) { 
         @err.message().toString() 
        } 
      } 
     } else {No error returned.} 
    </div> 
} 

L'uscita di una coppia di valori-chiave errore di forma è una scatola di avviso bootstrap con @key.toString() : @value.message.toString.

Se si desidera visualizzare l'errore a livello di campo, si consiglia di modificarlo leggermente con un'altra istruzione condizionale per il valore della mappa form.errors in modo che venga attivato solo per il campo specifico. Non ho ancora testato questo, ma sarebbe andare qualcosa come:

@if(form.hasErrors) { 
    @if(form.errors.size() > 0) { 
     @for((key, value) <- form.errors) { 
      @for(err <- value) { 
       @if(err.contains("YourSelectFieldName")) { 
        @err.message().toString() 
       } 
      } 
     } 
    } 
} 
+0

Sembra promettente. Controllerò e confermerò se funziona. – schlingel

+0

Hai qualche fortuna con lo snippet? – 2manyprojects

+3

In 2.1 form.errors contiene un Seq di 'FormError's invece di tuple, ma a parte questo, è praticamente invariato. – schmmd

1

La risposta da 2manyprojects funziona molto bene, ma si può fare la stessa cosa nel controller. Tutto dipende dalle tue preferenze e dallo stile.

public static Result save() { 
     Form<form> boundForm = form.bindFromRequest(); 
     if (boundForm.hasErrors()) { 
      String errorMsg = ""; 
      java.util.Map<String, List<play.data.validation.ValidationError>> errorsAll = boundForm.errors(); 
      for (String field : errorsAll.keySet()) { 
       errorMsg += field + " "; 
       for (ValidationError error : errorsAll.get(field)) { 
        errorMsg += error.message() + ", "; 
       } 
      } 
      flash("error", "Please correct the following errors: " + errorMsg); 
      return badRequest(detail.render(boundForm)); 
     }