如何让用户在Grails中更改域类中的值

如何让用户在Grails中更改域类中的值,grails,Grails,有没有办法通过让用户输入新值来更改域类中的值? 因此,如果我们有一个视图页面和一个输入框,在输入框中输入的任何内容都将修改域类中的特定值 例如: class User { String userName } 在“视图”页面中: <input type="userName" action="changeUsername"> 请接受Alidad的建议: 看看吧,这是一个很好的资源 了解Grails是如何工作的 也就是说,我们可以查看运行grailsgeneratealltes

有没有办法通过让用户输入新值来更改域类中的值? 因此,如果我们有一个视图页面和一个输入框,在输入框中输入的任何内容都将修改域类中的特定值

例如:

class User {
    String userName
}
在“视图”页面中:

<input type="userName" action="changeUsername">

请接受Alidad的建议:

看看吧,这是一个很好的资源 了解Grails是如何工作的

也就是说,我们可以查看运行
grailsgeneratealltestapp.User
时生成的内容,以及它与您的问题的关系

使用基于域类用户的创建控制器和视图生成所有

package testapp

class User {

    String userName

    static constraints = {
        userName()
    }
}
请注意静态约束(这是添加验证的好地方),但生成与特定值相关的视图和控制器所需的只是将其添加到域类中的静态约束中

您希望能够更新域类。 好了,代码已经为我们生成了! 如果查看views/user/edit.gsp

<g:form url="[resource:userInstance, action:'update']" method="PUT" >
                <g:hiddenField name="version" value="${userInstance?.version}" />
                <fieldset class="form">
                    <g:render template="form"/>
                </fieldset>
                <fieldset class="buttons">
                    <g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" />
                </fieldset>
            </g:form>
您可以看到,它会执行一些检查,以确保实例存在并且没有错误(这基于您在域类中添加的验证),然后保存更新的用户实例,然后返回一条消息。将“工作”移出控制器并转移到服务类中也是一种很好的做法

但是给猫剥皮有很多不同的方法。视图和控制器之间用于更新域类的通信可以通过许多不同的方式完成

好吧,我希望这是有道理的,只是玩玩,玩得开心

看看,这是了解Grails如何工作的一个很好的资源。
@Transactional
def update(User userInstance) {
        if (userInstance == null) {
            notFound()
            return
        }

        if (userInstance.hasErrors()) {
            respond userInstance.errors, view:'edit'
            return
        }

        userInstance.save flush:true

        request.withFormat {
            form multipartForm {
                flash.message = message(code: 'default.updated.message', args: [message(code: 'User.label', default: 'User'), userInstance.id])
                redirect userInstance
            }
            '*'{ respond userInstance, [status: OK] }
        }
    }