Передача модели во включенную JSP? - PullRequest
2 голосов
/ 18 февраля 2011

Есть ли способ передать мою модель в JSP, который я включаю с тегом <script/>?

Я пытаюсь создать динамический javascript, и мне нужна модель, чтобы получить доступ к объекту, у которого есть набор свойств, который мне нужен.Я использую Liferay для автоматического включения JSP, и я использую контроллер пружины.

Контроллер:

@RequestMapping
public String showForm( ModelMap model ){
model.addAttribute( "mykey", object );
return "myview";
}

Доступ к ${mykey} из myview.jsp работает, но какЯ получаю на модели из включенного JSP?

Ответы [ 2 ]

4 голосов
/ 18 февраля 2011

JSP, который вы включаете с тегом <script>? Так что JSP представляет собой динамически заполненный text/javascript ответ? Нет, это, конечно, невозможно. Он загружается полностью отдельным HTTP-запросом, который не будет содержать те же атрибуты, что и запрос, который возвратил родительскую HTML-страницу. Это не следует путать с включениями на стороне сервера, использующими <jsp:include>, которые выполняются в рамках одного и того же HTTP-запроса.

Помимо помещения его в область сеанса (которая может содержать больше предупреждений, чем вы хотите), лучшее, что вы могли бы сделать, - это просто напечатать необходимые данные в виде глобальной переменной JS.

<script>var foo = '${model.foo}';</script>
<script src="script.jsp"></script>

Таким образом, вы можете просто получить к нему доступ обычным способом JS внутри script.jsp.

Я не делаю Spring, но теоретически вы могли бы просто сопоставить некоторый контроллер Spring на script.jsp, чтобы он получал свою собственную модель (которая может быть такой же, как в родительской JSP, когда это необходимо) .

4 голосов
/ 18 февраля 2011

Я считаю, что модель уже находится в объекте запроса. Вы должны иметь возможность получить к нему доступ с вашего включенного JSP. Если это не сработает, вам нужно будет сохранить его как атрибут запроса (возможно, вы сможете просто повторно использовать тот, который хранится в Spring MVC) ... затем передать имя атрибута запроса в качестве параметра включенному jsp:

<c:set var="myRequestModel" value="${model}" scope="request" />
<jsp:include ... >
   <jsp:param name="model" value="myRequestModel"/>
</jsp:include>

В вашем включенном jsp будет использоваться это имя для доступа к этой модели: -

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