我有一个“Thing”域类,其中每个Thing都有一个记录号(不是自动生成的id),用户将用它来访问Thing:
class Thing {
...
String recordNumber
...
}
有一个表格可以查找Thing,知道它的recordNumber:
<g:form action="search">
<input name="recordNumber">
<g:submitButton name="btn" value="go to this Thing"/>
</g:form>
我想在此表单中使用验证过程:如果找不到recordNumber(Thing.findByRecordNumber(recordNumber) == null
),则输入字段必须为红色,并且工具提示必须显示错误消息“记录号不找到”。
据我所知/读过(我是grails新手),这必须写成Thing类中的约束:
static constraints = {
recordNumber validator: { n -> Thing.findByRecordNumber(recordNumber) }
}
问题是:我没有以这种形式填充所有“Thing”属性,只有recordNumber属性,所以我就是无法调用
new Thing(params).validate()
如何仅在一个字段上调用验证,而不是在整个对象上调用验证?
答案 0 :(得分:3)
如果这是你的主要问题,虽然我在那里看到其他人:
“如何只在一个字段上调用验证,而不是在整个对象上调用验证?”
您可以传递值列表进行验证,它只会验证这些属性
new Thing(params).validate(["recordNumber"])
http://grails.org/doc/latest/ref/Domain%20Classes/validate.html
答案 1 :(得分:0)
验证是针对域类属性的约束。您需要在控制器中执行操作:
def search = {
if(params.recordNumber && Thing.findByRecordNumber(params.recordNumber)){
redirect(action: "show", params:[id:Thing.findByRecordNumber(params.recordNumber).id])
}else{
flush.message = "No record found"
render(view:'VIEW_WITH_SEARCH_FORM')
}
}
如果您想在不刷新页面的情况下进行验证,请编写一个javascript代码。