Можно ли получить доступ к аннотированным сеансам Spring MVC на нескольких контроллерах? - PullRequest
4 голосов
/ 14 октября 2010

У меня есть веб-приложение, работающее под управлением Spring 3.0 и использующее Spring-MVC.У меня есть несколько контроллеров, настроенных так:

@Controller
@RequestMapping("/admin")
@SessionAttributes({"clientLogin", "selectTab", "user", "redirectUrl"})
public class AdminController {
...
}

@Controller
@SessionAttributes({"clientLogin", "selectTab", "user", "redirectUrl"})
public class PublicController {
....
}

Я могу добавить аннотированные переменные в ModelMap с помощью чего-то вроде

map.addAttribute("user", "Bob");

Это прекрасно работает, чтобы сохранить переменную в текущемконтроллер;Я могу получить доступ к переменной из modelMap из любого другого метода в этом контроллере.Но когда пользователь переходит на страницу в другом контроллере, хотя та же самая переменная указана в @SessionAttributes, она не доступна во втором контроллере.

Можно ли получить доступ к этим аннотированным переменным через несколько контроллеров, используя аннотации?

Ответы [ 2 ]

5 голосов
/ 18 октября 2010

Нет, это невозможно - атрибуты SessionAttributes, на мой взгляд, плохо названы.

Если вы хотите использовать эти атрибуты на разных контроллерах, вы можете явно поместить их в сеанс, используя:

session.setAttribute ()

0 голосов
/ 25 мая 2012

Вы можете иметь родительский класс BaseController, который не обязательно должен быть классом @Controller, и использовать там переменную @SessionAttibutes({"clientLogin", "selectTab", "user", "redirectUrl"}).Помните, что этот класс должен попадать в пакет сканирования MVC.Затем, когда вам нужно использовать это в ваших реальных контроллерах, используйте, как показано ниже.

public String getAllDetails(@ModelAttributes("clientLogin") Client client){
    client.getName();
    return "somejsp";
}
...