2012-02-18 52 views
2

我使用下面的代碼綁定的用戶模型[待視圖/ JSP使用]:春:適時/後期綁定@ModelAttribute

@ModelAttribute("users") 
public Collection<User> populateUsers() { 
    return userService.findAllUsers(); 
} 

但有時我只需要加載幾個用戶有特殊的作用,這我用下面的代碼嘗試:

int role = 2; //this is being set in a Controller within a method @RequestMapping(method = RequestMethod.GET) public String list(
@ModelAttribute("users") 
public Collection<User> populateUsers() { 
    if(role == 2) 
     return userService.findAllUsersByRole(role); 
    else 
     return userService.findAllUsers(); 
} 

但populateUsers總是被調用在控制器開始,之前的角色列表中的方法設置,你能請幫助我如何設置用戶[類似於後期綁定]

問候

- 添加代碼

@Controller 
@RequestMapping("/users") 
public class UserController { 

@Autowired 
UserService userService; 

@RequestMapping(method = RequestMethod.POST) 
public String create(@Valid User user, BindingResult bindingResult, 
     Model uiModel, HttpServletRequest httpServletRequest) { 
    if (bindingResult.hasErrors()) { 
     uiModel.addAttribute("user", user); 
     addDateTimeFormatPatterns(uiModel); 
     return "users/create"; 
    } 
    uiModel.asMap().clear(); 
    userService.saveUser(user); 
    return "redirect:/users/" 
      + encodeUrlPathSegment(user.getId().toString(), 
        httpServletRequest); 
} 

@RequestMapping(params = "form", method = RequestMethod.GET) 
public String createForm(Model uiModel) { 
    uiModel.addAttribute("user", new User()); 
    addDateTimeFormatPatterns(uiModel); 
    return "users/create"; 
} 

@RequestMapping(value = "/{id}", method = RequestMethod.GET) 
public String show(@PathVariable("id") Long id, Model uiModel) { 
    addDateTimeFormatPatterns(uiModel); 
    uiModel.addAttribute("user", userService.findUser(id)); 
    return "users/show"; 
} 

@RequestMapping(value = "/{id}", params = "form", method = RequestMethod.GET) 
public String updateForm(@PathVariable("id") Long id, Model uiModel) { 
    uiModel.addAttribute("user", userService.findUser(id)); 
    addDateTimeFormatPatterns(uiModel); 
    return "users/update"; 
} 

@ModelAttribute("users") 
public Collection<User> populateUsers() { 
    return userService.findAllUsers(); 
} 

@ModelAttribute("userroles") 
public Collection<UserRole> populateUserRoles() { 
    return Arrays.asList(UserRole.class.getEnumConstants()); 
} 

void addDateTimeFormatPatterns(Model uiModel) { 
    uiModel.addAttribute(
      "user_modified_date_format", 
      DateTimeFormat.patternForStyle("M-", 
        LocaleContextHolder.getLocale())); 
} 

} 

@PathVariable( 「ID」)長的id是我需要populateUsers的ID,希望這是顯而易見的。

+0

你可以完成放置代碼來幫助 – Jhonathan 2012-02-18 04:30:06

回答

0

設置在所要求的方法模型屬性已經解決了我的問題:

model.addAttribute("users", return userService.findAllUsersByRole(role)); 

謝謝!

1

如果角色在當前請求中,則此方法將角色綁定到變量角色。

 @ModelAttribute("users") 
     public Collection<User> populateUsers(@RequestParam(required=false) Integer role) { 
      if(role != null && role == 2) 
       return userService.findAllUsersByRole(role); 
      else 
       return userService.findAllUsers(); 
     } 
+0

不,當前請求沒有角色參數 – user237865 2012-02-18 06:11:04

+0

我試着用你的建議,但不幸的是它不是請求變量,而是路徑變量 - 像http:// localhost:8080/ams /用戶/ 199?的形式。現在,199是用戶標識,基於此,我們必須加載具有相同角色的其他用戶。 – user237865 2012-02-22 09:11:20