Grails - 来自gsp的控制器访问变量

时间:2014-07-16 10:01:32

标签: grails controller gsp params

我有以下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() - 动作的一个特定用户。在那里,我使用id检索有关params.id用户的信息,并使用params.role检索用户的角色名称。

userDetails.gsp中,用户可以更新某些用户的属性。但是,如果他没有输入用户名,则应将其重定向回userDetails.gsp。 (我知道我可以使用gsp中的required - 属性检查这一点 - 这只是为了理解功能)

这就是我遇到的问题 - 使用userDetails() - 动作时,会将两个参数传递给gsp。但是现在提交重定向时我不知道如何访问这些信息。因此,呈现userDetails.gsp会导致错误,因为有关userrole的所需信息不可用。

任何帮助都将受到高度赞赏!

1 个答案:

答案 0 :(得分:1)

您应该更改提交到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' databinding可以自动执行此操作。