2012-09-11 2 views
2

양식 오류를 각 필드 위에 표시하는 대신 양식의 맨 위에 그룹화하는 쉬운 방법이 있습니까?Play!에서 양식 오류 그룹화 프레임 워크

@(registrationForm: Form[User]) 

@implicitField = @{ FieldConstructor(views.html.helper.twitterBootstrap2.twitterBootstrap2FieldConstructor.f) } 

@import helper._ 

@helper.form(action = routes.Registration.index) { 

    <fieldset> 

     @if(registrationForm.hasGlobalErrors) { 
      <div class="alert alert-error"> 
      <a class="close" data-dismiss="alert">×</a> 
       @registrationForm.globalError.message 
      </div> 
     } 

     <legend>Register</legend> 

     @inputText(
      registrationForm("firstName"), 
      '_label -> "First Name", 
      '_showConstraints -> false, 
      '_showErrors -> true, 
      '_error -> registrationForm.error("firstName") 
     ) 

     @inputText(
      registrationForm("lastName"), 
      '_label -> "Last Name", 
      '_showConstraints -> false, 
      '_showErrors -> true, 
      '_error -> registrationForm.error("lastName") 
     ) 

     @inputText(
      registrationForm("emailAddress"), 
      '_label -> "Email Address", 
      '_showConstraints -> false, 
      '_showErrors -> true, 
      '_error -> registrationForm.error("emailAddress") 
     ) 

     @inputPassword(
      registrationForm("password"), 
      '_label -> "Password", 
      '_showConstraints -> false, 
      '_showErrors -> true, 
      '_error -> registrationForm.error("password") 
     ) 

     @inputPassword(
      registrationForm("password"), 
      '_label -> "Confirm Password", 
      '_showConstraints -> false, 
      '_showErrors -> true, 
      '_error -> registrationForm.error("password") 
     ) 

    </fieldset> 

    <button type="submit" class="btn">Register</button> 

} 

나는 고유의 이메일 주소를 확인하고 그 검증을 기반으로하는하고있어 사용자 지정 유효성 검사를 가지고, 내가 글로벌 오류에 오류를 추가

여기 내 스칼라 템플릿입니다. 폼의 맨 위에이 오류와 함께 그룹화 된 다른 오류 (다른 필드의 유효성 검사 결과로 throw 된)를 추가하고 싶습니다. 어떤 제안?

답변

5

@if(registrationForm.hasGlobalErrors){에서 항상 모든 오류 목록을 가져 와서 트래버스하고 각 메시지를 출력하도록 registrationForm.globalErrors으로 전화 해 볼 수 있습니다.

예 :

@if(registrationForm.hasGlobalErrors){ 
    <div class="alert alert-error"> 
     @for(validationError <- registrationForm.globalErrors){ 
       <a class="close" data-dismiss="alert">×</a> 
       @validationError.message 
     } 
    </div> 
} 

편집 : "최고"솔루션이 될 수 있지만,해야하지 않을 수 지정 유효성 검사 메시지를 그룹화하는 다른 방법을 포함하도록 내 대답을 업데이트하고있어 나는 아래의 주석의 요청에 그것을 성취하십시오. 컨트롤러에서

:

if(filledForm.hasErrors()){ 

     for(String key : filledForm.errors().keySet()){ 
      List<ValidationError> currentError = filledForm.errors().get(key); 
      for(ValidationError error : currentError){ 
       flash(key, error.message()); 
      } 
     } 
} 

아니면 당신이 선호하는 중 반복자를 사용할 수 있습니다.

다음 뷰의 라인을 따라 뭔가

:
@if(flash.size() > 0){ 
    <div class="alert-alert error"> 
     @for((key, value) <- flash){ 
      <strong>Error : </strong> @value<br /> 
     } 
    </div> 
} 

내가 언급처럼

아니라 가장 우아한 해결책, 그러나 당신의 페이지 상단에 오류의 큰 목록을 얻어야한다.

+0

내가 그룹에 노력하고있어 오류가 글로벌 오류에 넣어지고 것 같지 않습니다. 요청 양식을 양식에 바인딩하면 얻을 수있는 결과는 다음과 같습니다. 양식 (of = 클래스 models.User, data = {lastName = User, [email protected], firstName = Test, password = – Luke

+0

죄송합니다. 이미 전역 오류에 오류가 추가되었음을 읽었습니다. 사용자 정의 유효성 검사를 수행 할 때 다른 방법은 컨트롤러의 Flash 범위에 오류를 추가 한 다음 해당 메시지로 추가 한 ValidationErrors를 모두보고 출력 할 수 있다는 것입니다. 그 경로가 당신이 가고 싶다면 나는 이것을 반영하기 위해 나의 대답을 편집 할 수있다. 그러나 나는 이것이 "가장 정확한"수단이라는 것을 확신하지 못한다. –

+0

답장을 보내 주셔서 감사합니다. 나는 실제로 Play가 처음이다! 뼈대; 그러나 양식의 맨 위에 오류를 그룹화하는 것이 매우 간단한 다른 프레임 워크를 사용 했으므로 뭔가 놓친 경우 궁금합니다. 사용 해본 솔루션이 있다면 답안에 넣으면 크게 감사하겠습니다. 감사! – Luke

1

globalErrors에 사용자 지정 전역 오류를 추가하고이를보기에 표시하는 데 문제가있었습니다. 내 솔루션은 오류 개체를 사용하고 "글로벌"키 아래에 이러한 전역 오류를 추가합니다. 그런 다음보기에서 맨 위에 모든 "전역"오류가 표시됩니다.

내보기 :

@for(error <- form("global").errors) { 
     <p>@error.message</p> 
} 

내 컨트롤러 :

ValidationError error = new ValidationError("global", "User is not authorized."); 
List<ValidationError> errors = new ArrayList<ValidationError>(); 
errors.add(error); 
loginForm.errors().put("global", errors); 
return badRequest(login.render(loginForm)); 
관련 문제