Почему объект Model с псевдонимами недоступен из jsp include? - PullRequest
2 голосов
/ 25 августа 2011

У меня есть объект Model ("foo"), добавленный в ModelMap в контроллере MVC:

Spring MVC Controller:

Foo foo = new Foo("FooName");
model.addAttribute("foo", foo);
return "foo";

Я могу вызвать свойства объектав foo.jsp.Я также установил псевдоним для объекта foo, чтобы genericFoo мог получить доступ к объекту - genericFoo ожидает, что объект будет называться genericFoo.

foo.jsp:

<c:out value="${foo.name}"/> <!-- Displays "FooName" -->
<c:set var="genericFoo" value="${foo}"/>
<jsp:include page="genericFoo.jsp" />

Однако genericFoo.jsp не отображает свойства объекта.

Почему бы и нет?

genericFoo.jsp:

<c:out value="${genericFoo.name}"/> <!-- No value displayed displayed -->

1 Ответ

4 голосов
/ 25 августа 2011

Поскольку <jsp:include> выполняет динамическое включение (оно как бы отправляет запрос во включенную JSP). И <c:set> сохраняет объект внутри атрибута области страницы. По определению атрибуты в области видимости видны только со страницы, которая их определила.

Решения:

  1. Используйте статическое включение: <%@include file="..."/> вместо динамического
  2. поместите атрибут в атрибут области запроса: <c:set var="genericFoo" value="${foo}" scope="request"/>.
...