2012-02-18 49 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