我在XPages中有两个Date客户组件,一个叫做startDate,另一个叫做EndDate。我已经在Java中使用验证器方法进行格式验证。我想在Java代码中进行时间范围验证,而不是xp:validateDateTimeRange。 是否可能?什么时候应该发生?它在验证范围或更晚范围内。XPages日期组件Java中的时间范围验证
感谢
我在XPages中有两个Date客户组件,一个叫做startDate,另一个叫做EndDate。我已经在Java中使用验证器方法进行格式验证。我想在Java代码中进行时间范围验证,而不是xp:validateDateTimeRange。 是否可能?什么时候应该发生?它在验证范围或更晚范围内。XPages日期组件Java中的时间范围验证
感谢
以适合的XPages & JSF验证器和转换器的模型,你就放了格式验证你的Java代码到一个转换器,并做格式验证后,应提交的字符串转换为一个Java .util.Date。如果转换器失败,它应该添加一个FacesMessage和错误消息(有博客文章的详细信息 - 搜索FacesMessage)。 [FYI,对于日期转换,在不同国家使用的不同日期格式有很多细微的陷阱,当浏览器和服务器位于不同的时区时,以及在不同时区处理夏令时时,周围都会出现这种情况。]
转换后的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>
我已开始制定的意见,这是在你有更复杂的验证,以避免完全的验证情况较好,只是验证的你的事件,并保持你自己的错误信息。 –