2014-06-11 4 views
1

내가 다음 입력의 "그룹"이 그룹화 2 필드 :플레이 프레임 워크

  • 가 텍스트 입력이 1
  • 가 텍스트 입력이 체크 박스가

가 텍스트 입력 1은 항상 2

  • 을 필요하다 . 텍스트 입력 2는 체크 박스가 선택된 경우에만 필요합니다. 어떻게하면 플레이를 통해 이러한 유형의 검증을 할 수 있습니까? 현재 내가 이런 걸 가지고

    val myForm: Form[MyData] = Form(
        mapping(
        "text1" -> text.verifying("Text1 is required", !_isEmpty), 
        "text2" -> text.verifying("Text2 is required", !_isEmpty), 
        "check" -> boolean 
    ) 
    

    을하지만 명확하게는 것 항상이 텍스트 2를 필요로하기 때문에 내가 원하는 것이 아니다. 이 상호 의존성 검증을 달성하기 위해 이것을 작성하는 방법이 있습니까? 특별한 존재가 될거야 제안에 따라

    업데이트 : 임시 검증은 다른 모든 제약 조건에서까지 발생하지 않습니다

    1. :이 솔루션은 근무 그러나 그것은 내가 극복해야 할 몇 가지 단점이있다 양식 패스. 다른 제약 조건들이 실패하면, ad-hoc 유효성 검사는 실행되지 않습니다. 모두 함께 실행해야하므로 모든 오류 메시지를 양식에 표시 할 수 있습니다.
    2. 이 임시 확인 중에 할당 된 오류는 특정 양식 입력에 적용되지 않습니다. text2. 내 템플릿에서 text2에 다음과 같은 오류 메시지를 표시해야합니다 ("체크 박스를 선택 했으므로이 입력 내용을 입력해야합니다"). 오히려 오류는 일반적인 "양식 수준"오류 일뿐입니다. 이 유형의 유효성 검사 인스턴스가 여러 개있을 것이라고 생각할 수 있으므로이 오류가 text2에 적용된다고 가정 할 수 있습니다.

    재생이 지원하는 사용자 정의 유효성 검사기를 살펴 봤지만 여러 필드에서 작동하는 데 어떻게 사용할 수 있는지 알지 못합니다. The example they show은 양식의 다른 입력을 참조 할 수있는 확실한 방법이없이 유효성이 검사되는 양식 필드 만 적용합니다.

  • 답변

    1

    당신은 그들이 당신이 할 수있는 것은 검증 할 당신이 (documents를 참조하십시오.) 개체 만들기 양식에 임시 검증을 허용 문서에서 볼 수 있습니다

    def validate(text1: String, text2: String, check: Boolean) = if(check) text2.nonEmpty else true 
    
    val myForm: Form[MyData](
        mapping("text1" -> text.verifying("Text1 is required", !_isEmpty)) 
    )(MyData.unapply)(MyData.apply) verifying ("Text2 is required if check box checked", { 
        case data => validate(data.text2, data.check) 
    }) 
    

    을 제공해야하는지 당신도 원하지만 나는 그들의 custom validators 섹션을 체크 아웃 할 것입니다. (따라 가기에 좋은 경로로 추천하기 때문에)

    +0

    일반적으로 두 가지 문제가 있습니다 : 임시 검증은 다른 모든 것 비 임시 시험 (non-ad-hoc validation)은 통과합니다 (그래서 다른 모든 것이 괜찮지 않으면 오류에 대해 알지 못할 것입니다). 또한이 유효성 검사는 특정 필드에 "적용"되지 않습니다. text2 -> 다른 말로하면 text2 옆에있는 폼에 오류를 표시 할 수 있지만이 오류는 필드 수준이 아닌 폼 수준 오류 인 것으로 나타납니다. 아마도 사용자 정의 유효성 검사기가 도움이 될 것으로 생각되지만, 여러 필드 (사용자 정의 유효성 검사기가 단일 필드에서만 작동하는 것처럼 보입니다)에서 유효성을 검사하는 방법을 사용할 수는 없습니다. – oym

    +0

    @oym'validate' 메소드를'MyData' 클래스로 옮긴 다음 그 술어 표현식을 유효성 검사기로 호출 할 수 있습니다 (임의의 조건자를 허용하는 유효성 검사기가있는 경우). – wheaties

    +0

    조금 더 확장 해 주시겠습니까? 예를 들면? 나는 어떻게 시작해야할지 모르겠다. 어떻게이 validate 메소드를 사용 하는가? 감사합니다. – oym