2012-01-16 3 views
2

그래서, 당신은 바인딩 빈 속성에 JSR-303 주석을 사용하여 입력 유효성을 검사 할 수 있습니다 :JSF에서 임의의 객체를 검증 하시겠습니까?

class Ticket { 
    @MinAge(18) 
    Person person; 
} 

class Person { 
    @Min(1) @Max(100) 
    int age; 
} 

<p:inputText id="age" value="#{bean.ticket.person.age}" /> 

을 여기에, 인 person.age가 문제없이 (1..100 사이)을 검증 속성을.

문제는 외부 인스턴스 (person.age> = 18)의 유효성을 검사하려고합니다. 그러나 속성을 bean.ticket.person으로 확인하는 방법을 확인하는 방법은 무엇입니까?

<p:inputText id="age" value="#{bean.ticket.person.age}"> 
    <f:validate value="#{bean.ticket.person}" /> 
</p:inputText> 

또는 :

문제가
<p:inputText id="age" value="#{bean.ticket.person.age}"> 
    <f:validator id="jsr303-validator" value="#{bean.ticket.person}" /> 
</p:inputText> 

, 나는 <f:validator />에 값을 전달할 수 없습니다

내가 좋아하는 뭔가를 원한다. 유효성 검사 프로세스에 추가 속성을 추가하고 싶은 경우 페이지의 입력 내용 만 표시됩니다.

P. 이것은 단순화 된 예입니다, 실제 응용 프로그램입니다 :

... 
<p:inputText id="principalLabel" value="${activeACL.principal.label}" readonly="true" /> 
<p:commandButton value="Choose..." onclick="choosePrincipalDialog.show()" /> 
... 
<p:commandButton value="Save" action="${bean.saveACL}" oncomplete="editACLDialog.hide()" update="index" /> 

그리고 형 ACL_DTO의 activeACL : 여기

class ACL_DTO { 
    ... 
    @IdRequired 
    Principal_DTO principal; 
} 

, 처음 null입니다 choosePrincipalDialog의의 actionListener 내재적 변경 ${activeACL.principal.id}. IdRequired는 객체의 id 멤버 속성이 null 또는 -1이 아닌 객체를 제한하는 사용자 정의 제약입니다. 이 방법으로 나는를 다시 사용할 수 없습니다,

class Principal_DTO { 
    ... 
    @NotNull 
    @Min(0) 
    Long id; 
} 

... 
<h:inputHidden id="principalId" value="${activeACL.principal.id}" /> 
<h:inputText id="principalLabel" ... 

그러나 :

비록, 나는 ID 속성에 @NotNull을 사용하여 변경하고 아이디에 대한 검증을 가능하게하는 숨겨진 입력을 추가 할 수 있습니다 유효성 검사 메시지 "이 문자열은 null이 아니어야합니다.", "이 값은 -1이 아니어야합니다."와 같은 메시지를 사용자에게 전달하면 의미가 없습니다.

답변

1

먼저 입력란을 사용할 수있는 장소로만 콩을 사용해야한다고 생각합니다. 그런 다음 모델에 값을 지정합니다. 제 생각에는 콩을 모델로 직접 사용해서는 안되며 웹 양식지지 콩 (모든 웹 양식은 다른 콩을 가지고 있습니다)으로 사용하십시오.

두 번째로 유효성 확인을 수행하기 위해 다른 데이터에 대한 의존성이있는 시나리오를 발견했습니다 (예 : 사용자가 미국을 국가로 선택한 경우 우편 번호 등을 비워 두어서는 안 됨). 당신이 콩 유효성 검사를 사용하지 않는 경우 Cross field validation with Hibernate Validator (JSR 303)

항상 사용자 정의 유효성 검사기 클래스를 구현하거나 심지어 빈에서 직접 검증 방식을 정의 할 수 있습니다 : http://docs.oracle.com/javaee/6/tutorial/doc/bnavb.html#bnave

사용자 정의 주석을 구현하는 방법에 여기에보고 할 수 있습니다
관련 문제