你如何让用户在 Grails 中更改域 class 中的值
How do you make the user change a value in the domain class in Grails
是否可以通过让用户输入新值来更改域 class 中的值?
所以如果我们有一个视图页面和一个输入框,输入框中输入的任何内容都会修改域中的特定值 class
例如:
class User {
String userName
}
在浏览量页面中:
<input type="userName" action="changeUsername">
请采纳 Alidad 的建议:
Take a look at Grails scaffolding, it is a great resource to
understand how Grails works.– Alidad
话虽如此,我们可以查看 运行 grails generate-all testapp.User
时生成的内容以及它与您的问题的关系。
生成所有基于您的域 class 用户创建控制器和视图。
package testapp
class User {
String userName
static constraints = {
userName()
}
}
注意静态约束(这是添加验证的好地方)但是要生成与特定值相关的视图和控制器,您只需将其添加到您的您域中的静态约束 class。
您希望能够更新域 class。
好吧,已经为我们生成了执行此操作的代码!
如果你看看 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" >
这告诉我们将根据资源调用哪个控制器,将根据操作调用哪个方法 (您可以更多地了解良好的设计控制器在这里调用 Grails WebServices REST)
这将调用 controllers/testapp/UserController.groovy - 需要用户实例的更新
@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] }
}
}
你可以看到它做了一些检查以确保实例存在并且没有错误(这是基于你在你的域中添加的验证 Class)然后保存你更新的用户实例和然后 returns 回了一条消息。将 "work" 移出您的控制器并移至服务 class 也是一个好习惯。
但是给猫剥皮有很多不同的方法。视图和控制器之间更新域 class 的通信可以通过许多不同的方式完成。
好吧,我希望这是有道理的,随便玩玩,玩得开心!
是否可以通过让用户输入新值来更改域 class 中的值? 所以如果我们有一个视图页面和一个输入框,输入框中输入的任何内容都会修改域中的特定值 class
例如:
class User {
String userName
}
在浏览量页面中:
<input type="userName" action="changeUsername">
请采纳 Alidad 的建议:
Take a look at Grails scaffolding, it is a great resource to understand how Grails works.– Alidad
话虽如此,我们可以查看 运行 grails generate-all testapp.User
时生成的内容以及它与您的问题的关系。
生成所有基于您的域 class 用户创建控制器和视图。
package testapp
class User {
String userName
static constraints = {
userName()
}
}
注意静态约束(这是添加验证的好地方)但是要生成与特定值相关的视图和控制器,您只需将其添加到您的您域中的静态约束 class。
您希望能够更新域 class。 好吧,已经为我们生成了执行此操作的代码! 如果你看看 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" >
这告诉我们将根据资源调用哪个控制器,将根据操作调用哪个方法 (您可以更多地了解良好的设计控制器在这里调用 Grails WebServices REST)
这将调用 controllers/testapp/UserController.groovy - 需要用户实例的更新
@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] }
}
}
你可以看到它做了一些检查以确保实例存在并且没有错误(这是基于你在你的域中添加的验证 Class)然后保存你更新的用户实例和然后 returns 回了一条消息。将 "work" 移出您的控制器并移至服务 class 也是一个好习惯。
但是给猫剥皮有很多不同的方法。视图和控制器之间更新域 class 的通信可以通过许多不同的方式完成。
好吧,我希望这是有道理的,随便玩玩,玩得开心!