Grails 整数验证-不重新显示用户输入
我有一个域类:Grails 整数验证-不重新显示用户输入,grails,groovy,Grails,Groovy,我有一个域类: class Test { Integer blah } 以及一个跟踪控制器和视图。在表单中填充无效的整数(1a或ab)会导致验证失败,但不会用无效的用户输入重新填充文本框 我想我理解为什么会发生这种情况(blah,因为它是一个Integer,所以传递回gsp进行渲染的域实例不能包含alpha字符),但是有没有一种很好的方法用无效输入重新填充表单 有两种解决方案:使用带有正则表达式验证器的瞬态字符串blah,确保输入是数字,然后覆盖整数blahgetter以获取字符串bl
class Test {
Integer blah
}
以及一个跟踪控制器和视图。在表单中填充无效的整数(1a
或ab
)会导致验证失败,但不会用无效的用户输入重新填充文本框
我想我理解为什么会发生这种情况(blah
,因为它是一个Integer
,所以传递回gsp进行渲染的域实例不能包含alpha字符),但是有没有一种很好的方法用无效输入重新填充表单
有两种解决方案:使用带有正则表达式验证器的瞬态字符串blah
,确保输入是数字,然后覆盖整数blah
getter以获取字符串blah
值。然后在表单上显示String blah
。或者为每个人提供兼容HTML5的浏览器,其中type=number
工作:)
是否有更好的方法解决此问题?如果创建或保存域对象时出错,您能否将params对象返回到视图,并重新填充该对象(如果存在)的输入
我想我理解为什么会发生这种情况(返回给gsp进行渲染的域实例的blah不能包含alpha字符,因为它是一个整数)
正确,通常重新填充表单是这样工作的
class MyController {
def showForm() {
[bean: new Test()]
}
def processForm(Test bean) {
if (!bean.validate()) {
render view: 'showForm', model: [bean: bean]
} else {
// save the bean or whatever....
}
}
}
而showForm.gsp
中的表单字段是使用以下方法设置的:
<g:textField name="blah" value="${bean.blah}"/>
使用新插件,可以定义一个模板来定义每个字段的逻辑和样式,而不是重复每个字段的逻辑和样式。标签是为这个用例设计的:
检查作为数据绑定主题的bean,并从数据绑定期间填充的bean的errors对象中最初提交的值或bean属性的值中获取字段的值。一旦获得该值,它将自动进行HTML编码
例如:
<g:textField name="blah" value="${fieldValue(bean: testInstance, field: 'blah'}"/>
<g:textField name="blah" value="${fieldValue(bean: testInstance, field: 'blah'}"/>