2012-02-10 11 views
4

私は開始日と終了日に検証を配置する必要があり4つのテキストボックスクロスフィールド検証:dataTableの

<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 --here-a-workaroundまたはJEE6の場合は、Bean検証 – planetjones

答えて

2

私はこれに6時間を費やします。しかし、私はそれを解決しました。私の英語は悪いです。

  1. backingbeanにUIDDataフィールドを指し、豆バッキングのフォーム広告

    <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. を(バインドテーブル)のdataTableに結合atributeを追加

    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);} 
    
関連する問題