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'}"/>