Вы можете вызывать методы с аргументами в 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.Лучше всего просто выполнить работу в сервлете предварительной обработки, как рекомендует Duffymo.
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);
}