2014-12-04 1 views
1

내가 A A 시간을 사용하여 표시되는 항목의 목록을 가지고 값PostValidate 데이터 테이블 목록

<p:dataTable value="#{myBean.instructorsList}" var="ins"> 
    <p:column headerText="Name"> 
     <h:inputText value="#{ins.name}"/>         
    </p:column> 
</p:dataTable> 

내 스펙은 내가 강사가 다른 insturctor 같은 이름을 가질 수 있도록 할 수 없다는 것입니다. 따라서 전체 instructorList가 제출 될 때 모든 instructorList에 액세스 할 수 있어야합니다. postValidate f : 이벤트를 사용하여 유효성 검사를 시도했지만 JSF 수명주기로 인해 postValidation 단계가 끝날 때까지 모델 값을 업데이트하지 않습니다.

내 시도

<f:event listener="#{myBean.myMethod}" type="postValidate" /> 

백업 코드

private List<instructors> instructorsList; 

public void myMethod(ComponentSystemEvent event) { 

    // Attempting to use the instructorsList with new values. However, this 
    // is at the wrong stage 
} 

가 어떻게 중복 강사 이름을 확인 달성하기 위해 발리를 작성합니다?

+0

나는이 문제를 잘 모르겠다. postValidate 이벤트 리스너를 사용하여 제출 된 이름에 액세스하는 데 문제가 있습니까? 또는 리스너 내에서 유효성 검사 상태를 설정하는 데 문제가 있습니까? – kolossus

+0

예, postValidate 이벤트 리스너의 전송 이름에 액세스하는 데 문제가 있습니다. 값은 내 viewScoped 빈에서 아직 업데이트되지 않았습니다. – Sixthpoint

+0

postValidate가 요청 처리에 영향을주기에 너무 늦었습니다. 현재 정확히 제출 된 가치에 액세스하려고하십니까? – kolossus

답변

0

청취자 내에서 HtmlInputTextgetSubmittedValue 메서드를 사용하여 값을 구성 요소에서 바로 꺼냅니다. 또한 postValidate은 의미 론적으로 늦어서 유효성 검사 프로세스에서 문제를 호출합니다. 대신 preValidate 메서드를 사용하십시오. 전부, 당신은

public void myMethod(ComponentSystemEvent event) { 
     HtmlInputText txtBox = (HtmlInputText)event.getComponent(); 
     String theValue = txtBox.getSubmittedValue().toString(); //the value in the textbox 

     //based on the outcome of your validation, you also want to do the following 

     FacesContext.getCurrentInstance().setValidationFailed(); //flag the entire request as failing validation 
     txtBox.setValid(false); //mark the component as failing validation 

    } 

편집이 있어야합니다 이러한 접근 방식은 크게 사용자가 한 번에 하나의 행을 제출한다 전제에 힌지를. 하나의 요청으로 전체 표/열이 제출되는 경우 각 입력 필드를 하나씩 평가하면 경쟁 조건을 방지하는 데별로 도움이되지 않습니다. 대신 교차 필드 유효성 검사를 고려해야합니다.

EDIT 2 : 내가 잘못 했으므로 이벤트 수신기를 호출 할 때 경쟁 조건을 설정할 수 없습니다. 리스너는 각 행에 대해 순차적으로 실행됩니다. 이를 통해 경쟁 조건에 대한 걱정없이 각 행을 안전하게 확인할 수 있습니다 (중복에 대해 Map에 대한 것일 수 있음).

+0

좋은 응답, 어떻게 교차 필드 유효성 검사합니까? 그것이 내가하는 법을 정말로 찾고있는 것입니다. 개별 기준으로 필드를 확인할 필요가 없습니다. – Sixthpoint

+0

내 편집보기 @Sixthpoint – kolossus

+0

Map을 유효성 검사 포인트로 사용할 수 있으므로 유효성 검사를 마친 필드 수를 유지하면서 내 요구 사항을 충족시킬 수 있습니다. 끝까지 도달하고 조건이 만족스럽지 않으면 마지막 필드를 무효화하거나 유효성 검사 오류를 발생시켜 수명주기를 중지 할 수 있습니다. – Sixthpoint