Я хочу считать объект области (UserVO) из объема сессии.
Я устанавливаю UserVO в контроллере под названием WelcomeController
@Controller
@RequestMapping("/welcome.htm")
public class WelcomeController {
@RequestMapping(method = RequestMethod.POST)
public String processSubmit(BindingResult result, SessionStatus status,HttpSession session){
User user = loginService.loginUser(loginCredentials);
session.setAttribute("user", user);
return "loginSuccess";
}
}
Я в состоянии использовать объект на jsp страницах <h1>${user.userDetails.firstName}</h1>
Но я не в состоянии считать значение из другого Контроллера,
Я пытаюсь считать атрибут сессии следующим образом:
@Controller
public class InspectionTypeController {
@RequestMapping(value="/addInspectionType.htm", method = RequestMethod.POST )
public String addInspectionType(InspectionType inspectionType, HttpSession session)
{
User user = (User) session.getAttribute("user");
System.out.println("User: "+ user.getUserDetails().getFirstName);
}
}
Код, который вы показали , должен работать - HttpSession
] используется контроллерами совместно, и вы используете одно и то же имя атрибута. Таким образом, что-то еще идет не так, что вы нам не показываете.
Однако, независимо от того, работает это или нет, Spring предлагает более элегантный подход к хранению объектов модели в сеансе, используя аннотацию @SessionAttribute
(см. docs ).
Например (я не тестировал это, но это дает вам идею):
@Controller
@RequestMapping("/welcome.htm")
@SessionAttributes({"user"})
public class WelcomeController {
@RequestMapping(method = RequestMethod.POST)
public String processSubmit(ModelMap modelMap){
User user = loginService.loginUser(loginCredentials);
modelMap.addtAttribute(user);
return "loginSuccess";
}
}
, а затем
@Controller
@SessionAttributes({"user"})
public class InspectionTypeController {
@RequestMapping(value="/addInspectionType.htm", method = RequestMethod.POST )
public void addInspectionType(InspectionType inspectionType, @ModelAttribute User user) {
System.out.println("User: "+ user.getUserDetails().getFirstName);
}
}
Однако, если ваш исходный код не работает, это тоже не сработает, поскольку что-то иначе не так с вашей сессией.