2014-05-16 19 views
0
<xp:validateExpression 
          message="İzinler pazar günü başlayamaz."> 
          <xp:this.expression><![CDATA[#{javascript:var DateConverter = { 
dateToString: function(date:java.util.Date, pattern:String){ 
    try { 
    if(!date){ return ''; } 

    var formatter = DateConverter.getFormatter(pattern); 
    return formatter.format(date); 
    } catch(e){ 
    // ErrorHandling 
    } 
}, 

stringToDate: function(dateString:String, pattern:String){ 
    try { 
    if(!dateString){ return null; } 

    var formatter = DateConverter.getFormatter(pattern); 
    return formatter.parse(dateString); 
    } catch(e){ 
    // ErrorHandling 
    } 
}, 

getFormatter: function(pattern:String){ 
    try { 
    var cacheKey = 'dateFormatter' + pattern; 
    var dateFormatter = applicationScope[ cacheKey ]; 
    if(!dateFormatter){ 
    dateFormatter = new java.text.SimpleDateFormat(pattern); 
    applicationScope[ cacheKey ] = dateFormatter; 
    } 

    return dateFormatter; 
    } catch(e){ 
    // ErrorHandling 
    } 
} 
}; 

vDate = DateConverter.stringToDate(getComponent("LeaveDate").getSubmittedValue(), 'dd.MM.yyyy'); 
return (@Weekday(vDate) != 1); 
}]]></xp:this.expression> 

我想添加一個驗證來限制星期日的選擇。但是無論我選擇哪個日期,表達式都返回True。@Weekday對validateExpression的行爲

上面的代碼片段將字符串轉換爲日期,因爲我讀取getSubmittedValue()返回字符串,無論源字段類型如何。

return (@Weekday(getComponent("LeaveDate").getSubmittedValue()) != 1); 

我的第一個代碼是這個,但我無法得到它的工作。

回答

0

在驗證公式中,要驗證的值可用爲value。所以你的驗證公式需要更簡單:

 @Weekday(value) !== 1; 

這是否適合你?

+0

如果你看看我的代碼的最後一行,你會看到我使用了相同的。但獲得價值的部分是問題。 – senbon

+0

不,你沒有。您嘗試使用getSubmittedValue(),您實際上只需輸入值即可。 - 值不是佔位符,而是包含驗證公式所在控件的提交值的變量的實際名稱。所以你真的鍵入:值(全部小) – stwissel

1

這可能值得看看Java Calendar class。要加載日起,就要使用:

java.util.Calendar.getInstance(); 
java.util.Calendar.setTime(date); 

然後,您可以使用java.util.Calendar.get(java.util.Calendar.DAY_OF_WEEK),並檢查其對靜態字段java.util.Calendar.SUNDAY

+0

我想我真正的問題是,我無法用日期類型得到一個值。它作爲字符串返回。也許如果我很努力地從字符串創建一個日期,我可以成功,但我認爲應該有一個更清潔的方式。如果沒有大麻煩,你可以詳細說明你所建議的代碼嗎?我不是很熟悉java,但我正在努力改進。 – senbon

+0

它是一個字符串的事實不是一個問題,並且對驗證者來說是完全正常的。流程驗證階段接受來自瀏覽器的字符串輸入(記住瀏覽器中的所有內容實際上都是一個字符串,因爲HTML是文本)。然後它將它傳遞給Converters(爲了確保String能夠轉換爲底層數據類型,然後通過Validators傳遞它來執行任何與業務相關的驗證,就像你在這裏那樣。 do是使用try/catch從字符串中創建一個日期,如果它進入catch,你知道這不是一個有效的日期。 –

+0

這應該給你一些示例代碼http://stackoverflow.com/questions/5270272/how-to-determine-by-by-passing-by-passing-specific-date –

相關問題