grails - 在gsp上显示验证错误消息

时间:2014-07-09 13:11:39

标签: grails grails-domain-class grails-controller

我有以下域类:

class User {

    String name
    String contactName
    String primaryEmail
    String url
    String phoneNumber
    String address

    static hasMany = [users: User]

    static constraints = {
        name blank: false
        contactName blank: false
        primaryEmail email: true
        url blank: false
        phoneNumber blank: false
        address blank: false
    }
}

用户控制器:

class UserController {

    def create() {
        User user = new User()
        [user: user]
    }

    def save(User user) {
        if (!user.save(flush: true)) {
            render (view : 'create', model: [user: user])
        }

        redirect action: 'create'
    }
}

如果验证失败,我想要显示验证错误。我的create.gsp看起来像这样:

<body>
<g:form action="save" >
    <g:renderErrors bean="${user}"/>
    <g:textField name="user.name" id="message" value="${user.name}"/>
    <g:textField name="user.contactName" id="contactName" value="${user.contactName}"/>
    <g:textField name="user.primaryEmail" id="primaryEmail" value="${user.primaryEmail}"/>
    <g:textField name="user.url" id="url" value="${user.url}"/>
    <g:textField name="user.phoneNumber" id="phoneNumber" value="${user.phoneNumber}"/>
    <g:textField name="user.address" id="address" value="${user.address}"/>

    <g:submitButton name="submit" value="Save"/>
</g:form>

</body>
</html>

但是在使用无效数据的create.gsp的sumbit之后发生两件奇怪的事情 1)尽管所有字段都有值属性映射到User bean的某个字段,但所有字段都是空的

2)页面上没有验证错误 我做错了什么? 谢谢!

1 个答案:

答案 0 :(得分:1)

您必须在致电render()或使用else

后返回
def save(User user) {
    if (!user.save(flush: true)) {
        render (view : 'create', model: [user: user])
        return // either return here
    }else // or else here

    redirect action: 'create'
}

在原始代码中,您重定向到create并且不会将任何模型传递到其中