是否可以通过让用户输入新值来更改域类中的值?
因此,如果我们有一个 View 页面和一个输入框,那么在输入框中输入的任何内容都会修改域类中的特定值

例如:

class User {
    String userName
}

在 View 页面中:
<input type="userName" action="changeUsername">

最佳答案

请接受阿里达德的建议:



话虽如此,我们可以查看运行grails generate-all testapp.User时生成的内容以及它与您的问题的关系。

生成所有内容,并根据您的域类User创建一个Controller和Views。

package testapp

class User {

    String userName

    static constraints = {
        userName()
    }
}

请注意,静态约束(这是添加验证的好地方),但是要生成与特定值相关的 View 和 Controller ,所需要做的就是将其添加到域类中的静态约束中。

您希望能够更新域类。
好的代码已经为我们生成了!
如果您查看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>

在这种情况下,这将创建一个表单来更新我们选择了userInstance的当前用户。

另一个重要的观察结果是<g:form url="[resource:userInstance, action:'update']" method="PUT" >,它告诉我们将根据资源调用哪个 Controller ,并根据操作调用方法(您可以在此处针对Grails WebServices REST进行详细设计,以了解 Controller 的调用)

这将调用controllers / testapp / UserController.groovy-更新需要一个User实例
@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] }
        }
    }

您可以看到进行了一些检查,以确保实例存在并且没有错误(基于您在域类中添加的验证),然后保存更新的用户实例,然后返回一条消息。将“工作”移出 Controller 并进入服务类也是一种好习惯。

但是,有很多不同的方法可以给猫皮。 View 和Controller之间用于更新Domain类的通信可以通过许多不同的方式来完成。

好吧,我希望这是有道理的,随便玩玩吧!

关于grails - 如何使用户更改Grails中的域类中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30111248/

10-13 08:45