我在XPage中有两个Date客户组件,一个叫做startDate,另一个叫做EndDate。我已经在Java中使用了验证方法来进行格式验证。我想用Java代码而不是xp:validateDateTimeRange进行时间范围验证。 有可能吗?应该什么时候发生?它在验证范围或以后的范围内。
由于
答案 0 :(得分:0)
适合XPages&在JSF验证器和转换器模型中,您可以将用于格式验证的Java代码放入转换器中,在进行格式验证后,它应该将提交的String转换为java.util.Date。如果转换器失败,它应该添加一个带有错误消息的FacesMessage(有博客文章详细信息 - 搜索FacesMessage)。
[仅供参考,对于日期转换,不同国家/地区使用的不同日期格式存在许多微妙的问题,以及浏览器和服务器位于不同时区时的行为,以及处理不同时区的夏令时时间。 / p>
然后,转换后的Date对象将可用于验证器(而不是原始字符串)。
您可以使用xp:validateExpression来调用Java日期范围验证。如果从xp:validateExpression表达式返回false,它将使用message属性中提供的错误文本。否则,如果要使用不同的错误消息,请使用FacesMessage机制而不是返回false。
以下是自定义日期范围转换器的示例:
<xp:validateExpression
message="The end date must be after the start date.">
<xp:this.expression><![CDATA[#{javascript:// Server-side validation.
// value is the end date java.util.Date object
var startDate = getComponent('inputText1').getValue();
if( null == startDate ){
// no start date - this error message not applicable, validation pass.
return true;
}
if( value.before(startDate) ){
// failed validation
return false;
}
return true;}]]></xp:this.expression>
<xp:this.clientScript><![CDATA[// client-side validation (browser JavaScript)
function validate(){
var startDate = dijit.byId('#{id:inputText1}').get('value');
var endDate = dijit.byId('#{id:inputText2}').get('value');
if( null == startDate || null == endDate){
return true; // this error message not applicable, passed.
}
if( endDate.getTime() < startDate.getTime() ){
return false; // failed validation
}
return true;
}
validate()
]]></xp:this.clientScript>
</xp:validateExpression>
</xp:this.validators>