Как вызвать метод Java с аргументами, которые определены в классе Java, из JSP с использованием JSTL/EL. Метод возвращает массивы. Можно использовать любое возвращаемое значение.
Как вызвать параметризованный метод из JSP с использованием JSTL/EL
Ответ 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>