2013-01-12 13 views
10

Przede wszystkim chcę stwierdzić, że uważam, że dokumentacja gry w wersji 2.0 jest naprawdę, bardzo zła.Błąd wyświetlania w Play Framework 2

Poszukuję sposobu na umieszczenie błędu sprawdzania poprawności pod kodem HTML, tak jak w przypadku odtwarzania, w przypadku automatycznie generowanego pola wejściowego.

Próbowałem skopiować strukturę wynikowego kodu HTML pola wejściowego Odtwórz, ale jestem pewien, że brakuje mi jakiejś linii szablonu IfError-Scala w moim kodzie HTML.

Szkoda, że ​​nie można znaleźć dokumentacji Play 2.0 dla tematów objętych już dokumentacją gry w wersji <. Więc wylądujesz na starej, nie działającej dokumentacji, jeśli szukasz rozwiązania w dokumentach. Bardzo frustrujące!

+0

Najnowsza dokumentacja play2.1 znajduje się tutaj http://play2-docs-snapshot.herokuapp.com/render/master/Home. Ta dokumentacja jest na github, każda gałąź/tag ma własny dokument https://github.com/playframework/Play20/tree/master/documentation –

+4

Tak, dokumentacja jest absolutnie okropna – SobiborTreblinka

Odpowiedz

16

używam tego kodu, aby wyświetlić okno alertu globalnego bootstrap ze na formularzu:

@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> 
} 

Wyjście dla pary klucz-wartość błędu forma jest bootstrap okno alertu z @key.toString() : @value.message.toString.

Jeśli zamiast tego chcesz wyświetlić błąd na poziomie pola, możesz go nieco zmodyfikować za pomocą innej instrukcji warunkowej dla wartości mapy form.errors, tak aby wyzwalała się tylko dla określonego pola. Nie testowałem tego, ale że to pójdzie coś takiego:

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

Wygląda obiecująco. Sprawdzę i potwieram, czy działa. – schlingel

+0

Powodzenia z fragmentem? – 2manyprojects

+3

W 2.1 form.errors zawiera Seq of 'FormError's zamiast krotek, ale poza tym, to prawie niezmienione. – schmmd

1

Odpowiedź z 2manyprojects działa bardzo dobrze, ale można zrobić to samo w sterowniku. Wszystko zależy od twoich preferencji i stylu.

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