Как я могу передать объект в тег JSP? - PullRequest
25 голосов
/ 16 сентября 2008

У меня есть страница JSP, содержащая сценарий, в котором я создаю экземпляр объекта. Я хотел бы передать этот объект в тег JSP без использования кеша.

Например, я хотел бы сделать это:

<%@ taglib prefix="wf" uri="JspCustomTag" %>

<% 
 Object myObject = new Object();
%>

<wf:my-tag obj=myObject />

Я пытаюсь избежать прямого взаимодействия с любым из кэшей (page, session, servletcontext), я бы предпочел, чтобы мой тег обрабатывал это.

Ответы [ 6 ]

37 голосов
/ 04 августа 2009

Несколько иной вопрос, который я искал здесь: «Как передать объект в файл тега?»

Ответ: Используйте атрибут «type» директивы атрибута:

<%@ attribute name="field" 
              required="true"
              type="com.mycompany.MyClass" %>

Тип по умолчанию равен java.lang.String , поэтому без него вы получите сообщение об ошибке, если попытаетесь получить доступ к полям объекта, говоря, что оно не может найти поле типа String.

11 голосов
/ 10 декабря 2008
<jsp:useBean id="myObject" class="java.lang.Object" scope="page" />
<wf:my-tag obj="${myObject}" />

Не рекомендуется использовать Scriptlets на странице JSP. Убивает цель языка шаблонов.

5 голосов
/ 16 сентября 2008

Исходный синтаксис заключался в повторном использовании '<% =%>'

Так

<wf:my-tag obj="<%= myObject %>" />

См. эту часть руководства по библиотеке тегов Sun для примера

3 голосов
/ 16 сентября 2008

Для меня язык выражений работает, только если я сделаю эту переменную доступной, поместив ее, например, в контекст страницы.

<%  Object myObject = new Object();
    pageContext.setAttribute("myObject", myObject);
%>
<wf:my-tag obj="${myObject}" />

В противном случае TAS получает ноль.

И <wf:my-tag obj="<%= myObject %>" /> работает без дополнительных усилий. Также <% =%> дает проверку типа JSP во время компиляции, в то время как El проверяется только во время выполнения.

1 голос
/ 10 декабря 2014

Вы можете использовать "<% =%>", чтобы получить значение объекта прямо в вашем теге:

    <wf:my-tag obj="<%= myObject %>"/>

и чтобы получить значение любой переменной в этом объекте, вы можете получить это, используя "obj.parameter", например:

<wf:my-tag obj="<%= myObject.variableName %>"/>
0 голосов
/ 16 сентября 2008

Использовать язык выражений:

    <wf:my-tag obj="${myObject}" />
...