2013-07-29 3 views
1

나는 나의 Xpages 두 날짜 시간 구성 요소를 가지고 내가 전에 내가하는 식의 유효성 검사 기능을 사용하고 너무 제출이 날짜를 비교해야합니다검증 Xpages 날짜 시간 구성 요소

<xp:inputText value="#{document1.FUP_creation}" 
        id="FUP_creation" required="true"> 
        <xp:this.validators> 
         <xp:validateRequired 
          message="Date is required"> 
         </xp:validateRequired> 
        </xp:this.validators> 
        <xp:dateTimeHelper id="dateTimeHelper3"> 
        </xp:dateTimeHelper> 

        <xp:this.converter> 
         <xp:convertDateTime type="date" 
          dateStyle="short"> 
         </xp:convertDateTime> 
        </xp:this.converter> 
       </xp:inputText> 

       <xp:inputText value="#{document1.FUP_expireDate}" 
       id="FUP_expiredDate" required="true"> 
       <xp:this.validators> 
        <xp:validateRequired 
         message="Date is required"> 
        </xp:validateRequired> 
        <xp:validateExpression 
         message="The expired date must be greater than creation date"> 

<xp:this.expression><![CDATA[#{javascript://_dump("creation date") 
_dump(this.getValue()) 
_dump(this.getSubmittedValue()) 
var exp_date:java.util.Date=this.getValue(); 
var fup_creation:java.util.Date=getComponent("FUP_creation").getValue(); 

if (exp_date.compareTo(fup_creation)>=0) return true 
else return false}]]></xp:this.expression> 
         </xp:validateExpression> 


        </xp:this.validators> 
        <xp:dateTimeHelper></xp:dateTimeHelper> 
        <xp:this.converter> 
         <xp:convertDateTime type="date" 
          dateStyle="short"> 
         </xp:convertDateTime> 
        </xp:this.converter> 
       </xp:inputText> 

올바른 값은 항상 getSubmittedValue (이다) ..하지만 java.util.Date가 아닌 java.lang.String 모드로 돌아갑니다.

이제 java.text.SimpleDateFormat을 사용하여 제출 된 값을 java.util.Date로 변환 할 수 있지만 올바른 해결책입니까?

답변

2

당신은 발리 validateDateTimeRange를 사용하여 생성 날짜 필드에 minimum 값을 설정할 수 있습니다

<xp:validateDateTimeRange 
    message="The expired date must be greater than creation date" 
    minimum="#{javascript:getComponent('FUP_creation').getValue()}"> 
</xp:validateDateTimeRange> 

멋진 짧은 솔루션입니다하지만 두 날짜도 동일 할 수있는 경우에만 유용합니다.

validateExpression 작품이 방법으로 해결책 :

<xp:validateExpression 
    message="The expired date must be greater than creation date"> 
    <xp:this.expression><![CDATA[#{javascript: 
     var df:java.text.DateFormat = new java.text.SimpleDateFormat("yyyy-MM-dd"); 
     var fup_creation = df.format(getComponent('FUP_creation').getValue()); 
     var exp_date = this.getSubmittedValue(); 
     if(exp_date > fup_creation){ 
      return true; 
     }else{ 
      return false;}}]]> 
    </xp:this.expression> 
</xp:validateExpression> 

this.getSubmittedValue()은 "YYYY-MM-DD"형식의 문자열을 반환합니다. 이를 통해 비교 연산이 날짜 형식의 날짜를 비교하는 것과 동일한 결과를 제공하는 동일한 형식의 문자열과 비교할 수 있습니다.

메시지를 볼 수 있도록 페이지에 <xp:messages 또는 <xp:message 태그가 있는지 확인하십시오.

+0

Tnx 너 ... 나는 그것이 java.text.SimpleDateFormat을 사용할 필요가 있다고 상상한다. –

관련 문제