2010-02-26 3 views
1

Seam에 사용자 정의 유효성 검사 주석을 구현하려고합니다.Seam Custom Validation

우리는 개체의 목록을 가지고 있으며, 배열 A라고 부를 수 있으며, 배열 A는 오늘 날짜에 따라 다릅니다.

다음으로 입력 필드 stringB가 있습니다. stringB는 arrayA의 일부 값으로 변환 함수 funcC (...)를 거칩니다. 그래서 기본적으로

, 우리는 다음과 같은 루프를 사용 stringB 유효성을 검사 할 수 있습니다 :

for(a : arrayA) 
{ 
    a.equals(funcC(stringB)) 
    return true 
} 
return false 

내 문제는, 어떻게 arrayA 고려 심에서이 작업을 수행 할 동적인가? seam/hibernate validation annotation은 입력으로 만 상수를 취하는 것처럼 보입니다. 누구든지이 문제의 해결 방법을 알고 있습니까?

감사합니다.

답변

2

안부. 이 배열을 포함하는 Seam 기반 Bean을 채웠다 고 가정합니다. 예를 들어

:

다른 방법
@Name("someValidator") 
@Validator 
public class SomeValidator implements javax.faces.validator.Validator { 

    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { 

    MyArrayBean bean = (MyArrayBean)Component.getInstance("myArrayBean"); 
    String[] arrayA = bean.getArray(); 

    for(String a : arrayA) { 
     //etc 
    } 
    } 
} 

, 배열은 당신이에서 검증 된 페이지에 따라 변경 될 수있는 경우; <f:attribute>을 사용하여 항상 유효성 검사기에 값을 전달할 수 있습니다. 당신이 속성을 통해이 배열을로드 할 수 Component.getInstance() 대신에

<h:inputText value="#{someBean.stringB}"> 
    <f:validator validatorId="someValidator" /> 
    <f:attribute name="arrayA" value="#{myArrayBean.array}"/> 
</h:inputText> 

을 그리고 당신의 검증에, : 예를 들어

통과하는 경우

String[] arrayA = component.getValueExpression("arrayA").getValue(context.getELContext()); 

이 [참고 String[] 아무튼 ' 그 대신에 그것을 포함하는 빈을 전달하십시오.]

0

우선, Java Server Faces, Seam이 사용하는 뷰 기술인 은 서버 측 구성 요소 기술입니다. 동적 Array 속성이므로 입니다.을 사용하면 JSF 트리를 업데이트 할 수 있습니다 (RichFaces 또는 ICEFaces에서는 Ajax4JSF - 기본값 사용).

귀하의 질문에 표시된 바와 같이 은 복잡한 유효성 확인입니다 (속성이 둘 이상 포함되며 비즈니스 논리 처리에 종속 됨). 따라서 놓을 수있는 가장 좋은 장소는 비즈니스 로직 내부입니다. 그것에 대해 생각 해봐. 당신은 항상 당신의 검사기 내에서 Seam의 Component.getInstance()이 상황에서 배열을 가져 오기 위해 활용할 수