Grails 在同一个 gsp 中使用命令对象和对象
Grails use Command Object and object in the same gsp
我有一个控制器,编辑方法在表单文件中绘制用户信息。但
当我尝试错误地更新命令对象 return userCommand 对象时,我丢失了用户对象的所有信息。
有什么方法可以在同一个表格中同时使用两者吗?或者我在这里缺少什么。
用户控制器 class
class UserController {
def edit(User user) {
respond user
}
def update(UserCommand userCommand) {
log.debug "Update a User"
if (userCommand.hasErrors()) {
respond userCommand.errors, view: 'edit'
return
}
}
}
_form.gsp 文件
<g:form action="update">
<div class="form-group">
<label for="firstName">User First Name</label>
<input class="form-control" name="firstName" value="${user?.firstName}">
</div>
<div class="form-group">
<label for="lastName">User Last Name</label>
<input class="form-control" name="lastName" value="${user?.lastName}">
</div>
</g:form>
您应该在两个操作参数上使用 UserCommand
,并通过 data binding
在 UserCommand 的操作中创建您的用户对象。这是为了将您的视图模型与实际模型分开。
如其他用户所述,return 整个 UserCommand
而不是 UserCommand.errors
。您也可以在视图中访问 UserCommand.errors
。
请记住,在您的 UserCommand 有效后,您仍然需要创建 User 并对其进行验证,return 它有任何错误。例如,两者都可以是 运行 到 <g:renderErrors bean="${user}">
。
谢谢@tuomas-valtonen。你驱使我找到解决方案。
def edit(User user) {
UserCommand userCommand = new UserCommand()
bindData(userCommand, user)
respond userCommand
}
我有一个控制器,编辑方法在表单文件中绘制用户信息。但 当我尝试错误地更新命令对象 return userCommand 对象时,我丢失了用户对象的所有信息。
有什么方法可以在同一个表格中同时使用两者吗?或者我在这里缺少什么。
用户控制器 class
class UserController {
def edit(User user) {
respond user
}
def update(UserCommand userCommand) {
log.debug "Update a User"
if (userCommand.hasErrors()) {
respond userCommand.errors, view: 'edit'
return
}
}
}
_form.gsp 文件
<g:form action="update">
<div class="form-group">
<label for="firstName">User First Name</label>
<input class="form-control" name="firstName" value="${user?.firstName}">
</div>
<div class="form-group">
<label for="lastName">User Last Name</label>
<input class="form-control" name="lastName" value="${user?.lastName}">
</div>
</g:form>
您应该在两个操作参数上使用 UserCommand
,并通过 data binding
在 UserCommand 的操作中创建您的用户对象。这是为了将您的视图模型与实际模型分开。
如其他用户所述,return 整个 UserCommand
而不是 UserCommand.errors
。您也可以在视图中访问 UserCommand.errors
。
请记住,在您的 UserCommand 有效后,您仍然需要创建 User 并对其进行验证,return 它有任何错误。例如,两者都可以是 运行 到 <g:renderErrors bean="${user}">
。
谢谢@tuomas-valtonen。你驱使我找到解决方案。
def edit(User user) {
UserCommand userCommand = new UserCommand()
bindData(userCommand, user)
respond userCommand
}