2014-07-16 4 views
0

에서 컨트롤러 액세스 변수 I는 사용자가 현재 사용할 수있는 모든 역할과 사용자의 목록을 가져옵니다 index()을 시작으로 다음 Grails의 컨트롤러Grails에 - GSP

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") 
     } 
    } 
} 

있습니다. 사용자는 userDetails() -action에 링크 된 특정 사용자를 선택할 수 있습니다. 사용자의 id에 대한 정보를 params.id, 사용자 역할 이름을 params.role으로 검색합니다.

userDetails.gsp에서 사용자는 일부 사용자 속성을 업데이트 할 수 있습니다. 그러나 사용자 이름을 입력하지 않으면 userDetails.gsp으로 리디렉션되어야합니다. (나는 이것을 gsp에서 required -attribute로 확인할 수 있습니다. 기능을 이해하는 것입니다.

-action을 사용할 때 두 개의 매개 변수가 gsp로 전달됩니다. . 하지만 이제는 리디렉션을 할 때이 정보에 액세스하는 방법을 알지 못합니다. 결과적으로 userDetails.gsp을 렌더링하면 userrole과 관련된 필수 정보로 오류가 발생합니다.

도움이 되었으면 좋겠습니다.

답변

1

updateUser 작업에 제출하는 양식 (아마도)을 변경하여 역할을 전송해야합니다. 그런 다음 제출 된 데이터가 유효하지 않은 경우 userDetails 작업으로 다시 리디렉션 할 때 이러한 매개 변수를 포함하기 만하면됩니다. AS를

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()'에서'params'를 검색 할 수 있도록'redirect action : "userDetails", params : [id : params.id, role : params.role] -동작. 고맙습니다! – gabriel

+0

'params'가 작동하는지 100 % 확신하지 못했습니다. 내 대답을 자신의 정보로 업데이트했습니다. –