XPages日期组件Java中的时间范围验证

时间:2015-07-13 03:51:09

标签: validation xpages

我在XPage中有两个Date客户组件,一个叫做startDate,另一个叫做EndDate。我已经在Java中使用了验证方法来进行格式验证。我想用Java代码而不是xp:validateDateTimeRange进行时间范围验证。 有可能吗?应该什么时候发生?它在验证范围或以后的范围内。

由于

1 个答案:

答案 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>
相关问题