我有以下grails控制器
class UserController {
def userService
def roleService
def index() {
def roles = roleService.listRoles()
[roles: roles]
}
def userDetails() {
[user: userService.getUser(params.id), role:params.role]
}
def updateUser() {
def user = userService.getUser(params.id)
if (!(params.username)) {
flash.message = "You have to enter a username!"
redirect(action: "userDetails")
}
else {
user.username = params.username
user.person.title = params.title
user.person.given = params.given
user.person.middle = params.middle
user.person.family = params.family
userService.updateUser(user)
redirect(action: "index")
}
}
}
从index()
开始,用户获得当前可用的所有角色和用户的列表。然后,用户可以选择一个特定的用户链接到userDetails()
-action。在那里,我用params.id
检索用户的id
信息,用params.role
检索用户的角色名信息。
在userDetails.gsp
中,用户可以更新一些用户的属性。但是,如果他没有输入用户名,他应该被重定向回userDetails.gsp
。(我知道我可以用gsp内的required
-属性检查这一点-这只是为了理解功能)
这就是我卡住的地方-当使用userDetails()
-action时,两个参数被传递给gsp。但是现在,当提交重定向时,我不知道如何访问这些信息。因此,呈现userDetails.gsp
会导致错误,因为有关user
和role
的所需信息不可用。
任何帮助将非常感激!
您应该更改提交给updateUser
操作的表单,以便它也发送角色。然后,如果提交的数据无效,您只需在重定向回userDetails
操作时包含这些参数。
def updateUser() {
def user = userService.getUser(params.id)
// I'm not sure if this the right way to get a Role from the role parameter
// but presumably you can figure that out yourself
def role = roleService.getRole(params.role)
if (!(params.username)) {
flash.message = "You have to enter a username!"
redirect action: "userDetails", params: [id: params.id, role: params.role]
}
}
顺便说一句,手动将每个参数绑定到user
对象的方式是不必要的冗长。Grails的数据绑定可以自动完成。