Как связать параметр действия с объектом, хранящимся в области видимости сеанса в Spring MVC 3.x? - PullRequest
1 голос
/ 13 декабря 2011

Я хотел бы сделать что-то вроде этого:

public ModelAndView someAction(SessionUser sessionUser, Model model) {

    model.addAttribute(sessionUser);

    return new ModelAndView("someview");

}

Если экземпляр объекта SessionUser хранится в сеансе и связан с параметром sessionUser во время выполнения запроса.

Я новичок в Spring MVC, но в .NET MVC это может быть достигнуто путем создания ModelBinder как такового:

public class SessionUserModelBinder : IModelBinder
{
    private const string sessionUserSessionKey = "_sessionUser";

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        // Return the sessionUser from Session[] (creating it first if necessary)
        SessionUser sessionUser = (SessionUser)controllerContext.HttpContext.Session[sessionUserSessionKey];
        if (sessionUser == null)
        {
            sessionUser = new SessionUser();
            controllerContext.HttpContext.Session[sessionUserSessionKey] = sessionUser;
        }
        return sessionUser;
    }
}

Это будет выполнено как часть конвейера выполнения запроса. Если sessionUser не был найден в параметрах запроса, он бы дал возможность привязке этой пользовательской модели.

Существует ли аналогичный механизм в Spring MVC 3, который позволил бы мне выполнить то же самое? Я бы предпочел, чтобы мой контроллер и его методы не знали, исходит ли связанный объект из полей формы, параметров URL, сеанса и т. Д.

Заранее спасибо!

1 Ответ

1 голос
/ 13 декабря 2011

Да, вы можете декларативно привязать атрибут модели к сеансу. Для этого вам нужно пометить свой контроллер с помощью @SessionAttributes("sessionUser").

Смотри также:

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