2015-01-20 111 views
0

我已經在我的域名以下領域Grails領域驗證工作不

@BindingFormat('mm/dd/yyyy hh:mm a') 
Date advertiseDate 

@BindingFormat('mm/dd/yyyy hh:mm a') 
Date closeDate 

@BindingFormat('mm/dd/yyyy hh:mm a') 
Date letDate 

closeDate validator: { value, contract -> value >= contract.advertiseDate }  
letDate validator: { value, contract -> value >= contract.closeDate } 

我在messages.properties驗證錯誤文件

project.Contract.closeDate.validator.error = Close Date cannot be before Advertise Date 
project.Contract.letDate.validator.error = Let Date cannot be before Close Date 

出於某種原因,我的驗證似乎並沒有正在工作。我沒有收到任何錯誤,我只是沒有收到我的驗證錯誤。

這些驗證是在同一時間工作時,我使用只是一個mm/dd/yyyy格式的jQuery的日期選擇器,但一旦我切換到一個jQuery的DateTimePicker與mm/dd/yyyy hh:mm a格式它相當的工作。我所做的唯一的其他變化是包括以下

value="${formatDate(format:"MM/dd/yyyy hh:mm a", date:contractInstance?.letDate)}" 

上像一個普惠制格式的任何幫助或想法,將不勝感激。

+0

首先要確認他們是否被調用。這樣你就可以知道它是否與驗證器中的邏輯有關,或者阻止驗證器形式被調用。我建議在驗證器中添加一個println以在日誌中查看它是否被調用。例如:'println('in closeDate validator');' – David 2015-01-20 22:32:15

+0

你應該在月份使用大寫M:'@BindingFormat('MM/dd/yyyy hh:mm a')' – user190117 2015-01-22 09:18:14

回答

0

您需要以下邏輯validator

closeDate validator: { value, contract -> 
    if (value < contract.advertiseDate) return ['invalid'] 
}  
letDate validator: { value, contract -> 
    if (value < contract.closeDate) return ['invalid'] 
} 

//messages.properties 
project.contract.closeDate.invalid = Close Date cannot be before Advertise Date 
project.contract.letDate.invalid = Let Date cannot be before Close Date 

返回鍵將被用於查找該消息的特定領域。

請注意,在無效情況下,上述消息鍵的更改與返回鍵匹配。我假設project是郵件密鑰中的包名稱,並且日期使用@BindingFormat正確綁定。