Spring:@ModelAttribute的及时/后期绑定

时间:2012-02-18 03:56:11

标签: spring spring-mvc

我正在使用以下代码将用户绑定到模型[将在view / jsp中使用]:

@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总是在控制器的开头被调用,在list方法中设置角色之前,你能帮我解决一下如何设置用户[类似于后期绑定]

此致

- 添加代码

@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”)Long id是我在populateUsers中需要的ID,希望它是清楚的。

2 个答案:

答案 0 :(得分: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();
        }

答案 1 :(得分:0)

在所需方法中设置模型属性已解决了我的问题:

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

谢谢!