Весна: своевременное / позднее связывание @ModelAttribute - PullRequest
2 голосов
/ 18 февраля 2012

Я использую следующий код для привязки пользователей к модели [для использования в 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") Длинный идентификатор - это идентификатор, который мне требуется в populateUsers, надеюсь, он понятен.

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

Если роль в текущем запросе, этот метод связывает роль с переменной ролью.

        @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 голосов
/ 22 февраля 2012

Установка атрибута модели требуемым методом решила мою проблему:

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

Спасибо! * * 1004

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...