我在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>
我已開始制定的意見,這是在你有更復雜的驗證,以避免完全的驗證情況較好,只是驗證的你的事件,並保持你自己的錯誤信息。 –