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.lang.String, а не java.util.Date.

Теперь вы можете использовать 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() возвращает строку в формате "гггг-ММ-дд". Это позволяет нам сравнивать его со строкой того же формата, что и операции сравнения, дают тот же результат, что и сравнение дат в формате даты.

Убедитесь, что на вашей странице есть тег <xp:messages или <xp:message, чтобы вы могли видеть сообщение.

+0

Tnx you ... Я предполагаю, что нужно использовать java.text.SimpleDateFormat –

Смежные вопросы