我的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 ......但这是一个正确的解决方案吗?
答案 0 :(得分: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
标记,以便您可以看到该消息。