0

在控制器中,我验证表单输入,如下所示:

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 包装,它可以正常工作。

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

谢谢你。

4

2 回答 2

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]
    }
}
于 2013-09-26T19:49:03.960 回答
0

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

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

根据文档withForm

withForm 方法需要在表单中使用 useToken 属性

更新 您是否希望在重复提交时返回用户 bean?您只会在保存失败时返回用户。如果您希望用户在重复提交时返回尝试,

}.invalidToken {
  render view: "userForm", model: [user: user]
}
于 2013-09-26T15:50:41.790 回答