#java #spring #spring-mvc
#java #spring #spring-mvc
Вопрос:
Как я могу установить объект сеанса, который я могу использовать затем в любом из моих представлений, используя ${variable}
или ${requestScope.variable}
Чтобы иметь возможность использовать сеансы, нужно ли мне устанавливать <%@ page session="true" %>
?
Ответ №1:
Если вы хотите получить доступ к переменной сеанса в вашем представлении, самый простой способ сделать это :
${sessionScope.yourVariable}
Смотрите Использование объектов области для получения дополнительной информации.
Если вы установите <%@ page session="true">
, то JSP объединит область сеанса и область страницы в единое пространство имен. Затем вы можете сделать:
${yourVariable}
Вы можете поместить что-то в сеанс в контроллере mvc следующим образом:
@RequestMapping("/test")
@Controller
public class TestController {
@RequestMapping(method = RequestMethod.GET)
public String testMestod(HttpServletRequest request)
{
request.getSession().setAttribute("testVariable", "Test Values!!");
return "testJsp";
}
}
Наконец, атрибут @SessionAttribute предназначен для конкретного варианта использования и не помещает переменные в сеанс, чтобы любой мог получить к ним доступ:
Вот как разработчики spring описывают функциональность @SessionAttribute:
@sessionAttributes работает таким же образом, как и sessionForm в SimpleFormController. Это помещает команду (или для @sessionAttributes любого объекта) в сеанс на время между первым и последним запросом (большую часть времени начальный GET и конечный POST). После этого материал удаляется.
Каждый контроллер имеет свою собственную ModelMap, поэтому что-то, помещенное как @sessionAttributes в controller1, недоступно в controller2 и наоборот. Для того, чтобы это сработало, вам придется вручную добавлять данные в сеанс самостоятельно.
Ответ №2:
Используйте аннотацию sessionAttributes. Ознакомьтесь с документацией spring здесь
Вы также можете вручную добавлять и удалять переменные из сеанса с помощью API DefaultSessionAttributeStore