Grails复制表单提交和字段验证

时间:2013-09-26 15:39:18

标签: forms validation grails form-submit

在控制器中我验证表格输入如下:

withForm {
    def user = new User(params)    
    if(user.save()) {
        render "success"
    } else {
        render view: "userForm", model: [user: user]
    }
}.invalidToken {
    render view: "userForm"
}

在表单中,如果该字段存在错误,则在输入字段中添加类错误:

<input value="${user?.name}" name="name" type="text" class="text${user?.errors?.getFieldError("name") ? ' error':''}" id="name">

问题: 在视图中看不到Bean用户。如果我删除withForm wrap就可以了。

任何人都知道可能会发生什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

您的表单声明是否包含useToken,例如

<g:form useToken="true" ...>

根据documentationwithForm

  

withForm方法需要在a中使用useToken属性   形式

<强>更新 您是否希望在重复提交时返回User bean?您只在不成功保存时返回用户。如果您希望用户在重复提交时返回,请尝试

}.invalidToken {
  render view: "userForm", model: [user: user]
}

答案 1 :(得分:0)

为了使您的视图显示验证错误,您的控制器操作需要创建用户实例并对其进行验证。您当前的.invalidToken块不会执行此操作。一个很好的方法是让你的控制器动作自动从你的参数创建一个User实例:

def myAction(User user) {
    withForm { 
        if(user.save()) {
            render "success"
        } else {
            render view: "userForm", model: [user: user]
        }
    }.invalidToken {
        render view: "userForm", model: [user: user]
    }
}