JSTL, Beans и вызовы методов
Я работаю над JSP, где мне нужно вызвать методы на объекте, которые исходят от Bean. В предыдущей версии страницы не используется JSTL, и она работает правильно. Моя новая версия имеет следующие настройки:
<jsp:useBean id="pageBean" scope="request" type="com.epicentric.page.website.PageBean" />
<c:set var="pageDividers" value="<%= pageBean.getPageDividers() %>" />
<c:set var="numColumns" value="${pageDividers.size()}" />
Переменная pageDividers
является объектом List
.
Я сталкиваюсь с этой проблемой: когда я запрашиваю размер pageDivider
, генерируется исключение. Я знаю, что это простая ошибка JTSL - что я делаю неправильно?
Сообщение об ошибке:
Размер функции должен использоваться с префиксом, если пространство имен по умолчанию не указано
Как правильно получить доступ или вызвать методы моего объекта pageDividers
?
Ответы
Ответ 1
При использовании оператор-точка для доступа к свойствам в JSTL ${pageDividers.size}
(no ()) приводит к вызову метода с именем getSize()
.
Поскольку java.util.List предлагает метод с именем size()
(а не getSize()
), вы не сможете получить доступ к длине списка с помощью этого кода.
Чтобы получить доступ к размеру списка, JSTL предлагает функцию fn: length, используемую как
${fn:length(pageDividers)}
Обратите внимание, что для использования пространства имен fn вы должны объявить его следующим образом
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Кроме того, одна и та же функция может использоваться с любым типом коллекции, а также с строками.
Ответ 2
Чтобы получить доступ к свойству bean с помощью EL, вы просто называете это свойство (не вызываете метод). Итак, скажем, у вас есть метод, называемый getSize() в bean, а затем
${pageDividers.size}
Обратите внимание: no().
EDIT: Извините... внесла ошибку в исходное сообщение.