2015-07-13 66 views
0

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

感谢

+0

我已开始制定的意见,这是在你有更复杂的验证,以避免完全的验证情况较好,只是验证的你的事件,并保持你自己的错误信息。 –

回答

0

以适合的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>