2011-03-22 8 views
0

복합 구성 요소의 교차 필드 유효성 검사는 어떻게 구현합니까? 내가 사용하고있는 복합 컴포넌트는 입력 텍스트 박스입니다 (하나는 이메일 용이고 다른 하나는 이메일 확인 용입니다). confirmEmail 구성 요소에 대해 f : validator 태그를 적용했습니다. validate 메소드에서 email 복합 컴포넌트의 값을 얻는 방법. UIComponent 또는 UINamingContainer입니까?복합 구성 요소에 대한 교차 필드 유효성 검사

+0

가능한 복제본 [JSF2.0은 교차 필드 유효성 검사를 지원하지 않습니다. 해결 방법이 있습니까?] (http://stackoverflow.com/questions/6282466/jsf2-0-doesnt-support-cross-field- validation-is-there-a-workaround) –

답변

0

기술적으로 컴포지트는 UINaming 컨테이너이지만 모든 구성 요소는 하위를 찾을 수 있습니다.

나는 다음과 같은 가능성이 트림()와 equlasIgnoreCase를 사용

public void validate(FacesContext context, UIComponent component, Object value) { 
    UIInput first = (UIInput)component.findComponent("compositesFirstInputID"); 
    UIInput second = (UIInput)component.findComponent("compositessecondInputID"); 

    Object firstEntry = first.getSubmittedValue(); 
    Object secondEntry = second.getSubmittedValue(); 
    if(!firstEntry.equals(secondEntry)) 
     throw new ValidatorException(...); 
} 

일부 널 (null) 검사를 추가 할 수 있습니다 작동합니다 생각한다.

+0

@deepti 질문하기 - 두 개의 입력이있는 하나의 합성이 있고 사용 페이지의 복합 참조에 자식 f : 유효성 검사가 있다고 생각합니다. – JimO

0

위에서 설명한대로 validate 메소드를 구현했습니다. 내 코드의 문제는 복합 컴포넌트에서 f : validate 태그를 사용할 위치입니다.

<eg:inputText id="confirmEmail" value="backingbean.email"/> 

<eg:inputText id="email" value="backingbean.email"> 
<f:validator validatorId="core.jsf.CompareValidator" for="inputText"/> 
</eg:inputText> 

그러나 양식을 제출할 때 유효성 검사기가 호출되지 않습니다. 유효성 검사기를 구성 요소 주위에 포장해야합니까? 그렇지 않으면 올바른 구현 방법입니다.

관련 문제