0
我有4個字段需要價格(BigDecimal),但只有其中一個應包含價格。如果price2包含255.95,並且有人想要在price1中輸入價格那麼這應該被拒絕,並顯示一條消息,說明您必須清除另一個(本例中爲price2) 我試圖在域中執行此操作,但它沒有爲我工作。Grails驗證不可變字段
一個例子:
class Author {
def String name
def String email
def BigDecimal price1
def BigDecimal price2
def BigDecimal price3
// static hasMany = [books: Book]
static constraints = {
name nullable:true
email nullable:true
price1(nullable:true,
validator: { val, obj ->
(obj.price2==null) and (obj.price3 == null) })
price2(nullable:true,
validator: { val, obj ->
(obj.price1==null) and (obj.price3 == null) })
price3(nullable:true,
validator: { val, obj ->
(obj.price1==null) and (obj.price2 == null) })
}
static mapping = {
name column: "AuthorName", sqltype:"char", length:25
}
String toString() {
return name
}
def beforeValidate() {
}
}
我得到這個錯誤:
groovy.lang.MissingMethodException: No signature of method: masterdetail.Author.and() is applicable for argument types: (java.lang.Boolean) values: [true]
Possible solutions: any(), any(groovy.lang.Closure), find(), find(groovy.lang.Closure), find(java.lang.String), find(masterdetail.Author)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:81)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
at masterdetail.Author$__clinit__closure1$_closure3.doCall(Author.groovy:16)
那麼,怎麼辦呢?
布爾條件以'&&'結尾。 – doelleri
當然,我通常使用DELPHI進行編程,所以有時候我不認識到我的明顯錯誤。謝謝! – larand
我編輯了這個例子來顯示工作版本,以防某人感興趣。 – larand