2014-07-16 58 views
0

控制器訪問的變量,我有以下的Grails控制器的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()啓動用戶獲得當前可用的所有角色和用戶的列表。用戶然後可以選擇鏈接到​​-操作的一個特定用戶。在那裏,我檢索有關用戶的id的信息params.id和用戶的角色名稱params.role

userDetails.gsp用戶能夠更新一些用戶的屬性。但是,如果他沒有輸入用戶名,他應該重定向回userDetails.gsp。 (我知道我可以用required -gtribute在gsp中檢查它 - 它只是瞭解功能)

這裏是我卡住的地方 - 當使用​​-action時,兩個參數傳遞給gsp 。但是現在當提交重定向時,我不知道如何訪問這些信息。因此,呈現userDetails.gsp會導致錯誤,因爲有關userrole的所需信息不可用。

任何幫助將不勝感激!

回答

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可以自動做到這一點。

+0

它的工作。其實我不得不把下面的代碼放在''userDetails()''''''''''''''''''' -行動。謝謝! – gabriel

+0

如果'params'可以工作,我並不是100%確定的,我已經用你的信息更新了我的答案 –