JSTL, Beans и вызовы методов
Вопрос
Я работаю над JSP, где мне нужно вызывать методы для объекта, полученного из Бина. Предыдущая версия страницы не использует 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
?
Решение
При использовании оператора точки для доступа к свойству в JSTL Для доступа к размеру списка JSTL предлагает функцию fn: length , которая используется как Обратите внимание, что для использования пространства имен fn вы должны объявить его следующим образом Кроме того, одну и ту же функцию можно использовать с любым типом коллекции, а также со строками. $ {pageDividers.size}
(не нужно () ) приводит к вызову метода с именем GETSIZE () код>.
Поскольку java.util.List предлагает метод с именем size ()
(а не getSize ()
), вы не сможете получить доступ к длине списка с помощью этого кода. р>
<Ч>
${fn:length(pageDividers)}
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Другие советы
Чтобы получить доступ к свойству компонента с помощью EL, вы просто называете свойство (не вызываете метод). Допустим, у вас есть метод getSize () в bean-компоненте, то
${pageDividers.size}
Уведомление № ().
РЕДАКТИРОВАТЬ: Извините ... ошибка в исходном сообщении.