Как передать объект в JSP-тег?
У меня есть страница JSP, содержащая скрипт, где я создаю экземпляр объекта. Я хотел бы передать этот объект тегу JSP без использования кеша.
Например, я хотел бы выполнить следующее:
<%@ taglib prefix="wf" uri="JspCustomTag" %>
<%
Object myObject = new Object();
%>
<wf:my-tag obj=myObject />
Я пытаюсь избежать прямого взаимодействия с любым из кешей (страница, сеанс, servletcontext), я бы предпочел, чтобы мой дескриптор тега был.
Ответы
Ответ 1
Несколько другой вопрос, который я искал здесь: "Как передать объект в файл тега?"
Ответ. Используйте атрибут "type" директивы атрибута:
<%@ attribute name="field"
required="true"
type="com.mycompany.MyClass" %>
Тип по умолчанию соответствует java.lang.String, поэтому без него вы получите сообщение об ошибке, если попытаетесь получить доступ к полям объекта, говорящим, что он не может найти поле из типа String.
Ответ 2
<jsp:useBean id="myObject" class="java.lang.Object" scope="page" />
<wf:my-tag obj="${myObject}" />
Не рекомендуется использовать Scriptlets на странице JSP. Он убивает цель языка шаблонов.
Ответ 3
Исходным синтаксисом было повторное использование '<% =% > '
Итак,
<wf:my-tag obj="<%= myObject %>" />
Смотрите эту часть учебника библиотеки тегов Sun для примера
Ответ 4
Для меня язык выражений работает только в том случае, если я делаю эту переменную доступной, помещая ее, например, в контекст страницы.
<% Object myObject = new Object();
pageContext.setAttribute("myObject", myObject);
%>
<wf:my-tag obj="${myObject}" />
В противном случае tas получает значение null.
И <wf:my-tag obj="<%= myObject %>" />
работает без дополнительных усилий. Также <% =% > дает проверку типа времени компиляции jsp, а El проверяется только во время выполнения.
Ответ 5
Вы можете использовать "<% =% > ", чтобы получить значение объекта непосредственно в теге:
<wf:my-tag obj="<%= myObject %>"/>
и получить значение любой переменной внутри этого объекта, вы можете получить это с помощью "obj.parameter", например:
<wf:my-tag obj="<%= myObject.variableName %>"/>
Ответ 6
Использовать язык выражения:
<wf:my-tag obj="${myObject}" />