是否可以通过让用户输入新值来更改域类中的值?
因此,如果我们有一个 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/