Подтвердить что ты не робот

Как вызвать параметризованный метод из JSP с использованием JSTL/EL

Как вызвать метод Java с аргументами, которые определены в классе Java, из JSP с использованием JSTL/EL. Метод возвращает массивы. Можно использовать любое возвращаемое значение.

4b9b3361

Ответ 1

Вы можете ссылаться только на методы с аргументами в EL, если вы настроите таргетинг и используете совместимый с Servlet 3.0 контейнер (например, Tomcat 7, Glassfish 3, JBoss AS 6 и т.д.) с web.xml объявленным соглашением Servlet 3.0. Эта версия сервлета поставляется вместе с EL 2.2, которая позволяет ссылаться на произвольные методы экземпляра с аргументами.

Предполагая, что у вас есть ${bean} в области, которая относится к экземпляру класса, у которого есть метод, похожий на public Object[] getArray(String key), тогда вы должны это сделать:

<c:forEach items="${bean.getArray('foo')}" var="item">
    ${item} <br />
</c:forEach>

или даже с другой переменной в качестве аргумента

<c:forEach items="${bean.getArray(foo)}" var="item">
    ${item} <br />
</c:forEach>

Но если вы не настроите таргетинг на контейнер Servlet 3.0, вы не можете вообще вызывать методы с аргументами в EL. Лучше всего просто выполнить работу в сервлете предварительной обработки, как предлагает Даффимо.

Object[] array = bean.getArray("foo");
request.setAttribute("array", array);
// ...

Как совершенно другая альтернатива, вы можете создать функцию EL, которая делегирует вызов метода. Вы можете найти пример запуска где-нибудь внизу этот блог. Вы хотели бы получить что-то вроде:

<c:forEach items="${util:getArray(bean, 'foo')}" var="item">
    ${item} <br />
</c:forEach>

с

public static Object[] getArray(Bean bean, String key) {
    return bean.getArray(key);
}

Ответ 2

Вышеупомянутое решение не помогло мне. У меня была функция getRemitanceProfileInformation(user) в моем классе java. Я создал usebean класса java, а затем вызвал

<c:set var="paymentValueCode" value='remittanceaddr.getRemitanceProfileInformation("${user}")'/>

и он работал.

Ответ 3

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

Вероятно, вы спрашиваете, кто дает JSP этот экземпляр - это сервлет в компоновке MVC модели 2.

Здесь как будет работать поток:

  • Отправьте запрос GET/POST с JSP на сервлет.
  • Сервлет действует по этому запросу и выполняет некоторую работу с именем JSP. Помещает все необходимые объекты в запрос, сеанс или другую соответствующую область.
  • Сервлет передает ответ на следующий JSP, который может быть таким же, как и запрашивающий JSP.
  • Промыть, повторить.

Ответ 4

Если вы используете JSF, вы можете использовать действие bean как модель в области видимости и загружать из источника данных автоматически. И если вы используете JSP, как насчет использования TLD Tag? И используя тег JSTL <c:foreach>? Это экономит память при сохранении в сеансе или сохраняет в сеансе и удаляет его при загрузке события? Некоторые, как это (JSTL + TLD)

<c:forEach items="${myTag:getProductByPage(page)}" var="p">
     Product name: ${p.productName}
</c:forEach>