2012-02-10 1 views
4

나는 네 개의 텍스트 상자 크로스 필드 유효성 검사 : 데이터 테이블

<h:column > 
    <f:facet name="header"> 
     <h:outputText value="Start Date" /> 
    </f:facet> 
    <h:inputText id="startDate" value="#{sampleVO.startDate}" /> 
</h:column>   
<h:column > 
    <f:facet name="header"> 
     <h:outputText value="End Date" /> 
    </f:facet> 
    <h:inputText id="endDate" value="#{sampleVO.endDate}" /> 
</h:column>   
<h:column > 
    <f:facet name="header"> 
     <h:outputText value="Start Date" /> 
    </f:facet> 
    <h:inputText id="startDate1" value="#{sampleVO.startDate}" /> 
</h:column>   
<h:column > 
    <f:facet name="header"> 
     <h:outputText value="End Date" /> 
    </f:facet> 
    <h:inputText id="endDate1" value="#{sampleVO.endDate}" /> 
</h:column>   

내가 시작 날짜 및 종료 날짜에 검증을 둘 필요가있는 XHTML 페이지가 있습니다. 사용자가 id = "startDate"에서 시작 및 종료 날짜를 입력하는 경우 & id = "endDate"는 시작 날짜를 "01/01/2012"(1jan) 및 종료 날짜 : 01/31/2012라고 말하고 사용자가 일부 날짜를 입력하면 위의 부울 함수가 현재하고있는 경우 ID = "startDate1"와 ID를 = "endDate1"ID = "startDate1는"항상 최신의 범위가

public class SampleServiceimpl implements SampleService { 
    private List<SampleVO> listOfSample; 

    //this function gets called when clicked on Submit button on XHTML page 
    public Void submit() { 
     // how can i call datesOverLaps function to check entered 
     // start date and End date not overlapping, Also how to 
     // display the error message on XHTML page using FacingContext 
    } 

    public boolean datesOverlaps(List<SampleVO> sampleVO) { 
     final Date early = sampleVO.getStartDate(); 
     final Date late = sampleVO.getEndDate(); 

     for(SampleVO existing : sampleVO) { 
      if(!(early.isAfter(existing.getEnd())) || 
        (late.isBefore(existing.getStart()))){ 
       return true; 
      } 
     } 
     return false; 
    } 
} 

확실하지 중복되면 안 즉, ID = "endDate가"THN 커야합니다 시나리오에서 작동합니다. 도움이 될 것입니다.

+1

크로스 필드 유효성 검사 (IMO JSF가 제대로하지 못했음)를보고 싶을 수도 있습니다. - http://stackoverflow.com/questions/6282466/jsf2-0-doesnt-support-cross-field-validation-is - 해결 방법 또는 JEE6 일 경우 Bean Validation을 살펴보십시오. – planetjones

답변

2

나는 6 시간을 소비합니다. 그러나 나는 그것을 해결했다. 내 영어가 나쁘다.

  1. 이 backingbean에 UIDData 필드를 가리키는, 데이터 테이블에 바인딩 atribute 추가 (바인딩 테이블)

    <h:inputHidden id="validator" **validator="#{narocilo.validateKolicinaCena}"** value="morabiti"/> 
    
  2. 검증 방법 콩을 백업의 형태로 광고의 종료 전에

    <h:dataTable value="#{narocilo.podatki}" id="tabela" var="podatek" border="0" bgcolor="#F6FAF0" style="width:100%;" cellspacing="0" cellpadding="2" headerClass="header" rowClasses="#{narocilo.rowClasses}" columnClasses="align_left,align_right,align_center,align_right,align_right,align_center_konec" **binding="#{narocilo.podatkiData}"**> 
    
  3. public void validateKolicinaCena(FacesContext aContext,UIComponent aComponent,Object aValue) { 
    
    int shrani_index = fPodatkiData.getRowIndex(); 
    
    UIComponent column_kol = fPodatkiData.getChildren().get(2); 
    UIComponent column_cen = fPodatkiData.getChildren().get(5); 
    
    for(int i=0; i<fPodatkiData.getRowCount(); i++) { 
    
        fPodatkiData.setRowIndex(i); 
    
        UIInput kolicina_input = (UIInput) column_kol.findComponent("kolicina"); 
        UIInput cena_input = (UIInput) column_cen.findComponent("cena"); 
    
        Object kolicina = kolicina_input.getLocalValue(); 
        Object cena = cena_input.getLocalValue(); 
    
        if(kolicina == null && cena != null) { 
    
         kolicina_input.setValid(false); 
    
         FacesMessage sporocilo = Sporocila.getMessage("si.alkimisticus.bitea.error", "javax.faces.component.UIInput.REQUIRED", null); 
         sporocilo.setSeverity(FacesMessage.SEVERITY_ERROR); 
    
         aContext.addMessage(kolicina_input.getClientId(aContext), sporocilo); 
    
        } else if(kolicina != null && cena == null) { 
    
         cena_input.setValid(false); 
    
         FacesMessage sporocilo = Sporocila.getMessage("si.alkimisticus.bitea.error", "javax.faces.component.UIInput.REQUIRED", null); 
         sporocilo.setSeverity(FacesMessage.SEVERITY_ERROR); 
    
         aContext.addMessage(cena_input.getClientId(aContext), sporocilo); 
    
        } else { 
         kolicina_input.setValid(true); 
         cena_input.setValid(true); 
        } 
    
    
    } 
    
    fPodatkiData.setRowIndex(shrani_index);}