JSTL, Beans и вызовы методов - PullRequest
14 голосов
/ 23 октября 2008

Я работаю над 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 объекта?

Ответы [ 2 ]

27 голосов
/ 23 октября 2008

При использовании оператора точки для доступа к свойству в JSTL, ${pageDividers.size} (не требуется () ) приводит к вызову метода с именем 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 голосов
/ 23 октября 2008

Чтобы получить доступ к свойству компонента с помощью EL, вы просто называете свойство (не вызываете метод). Допустим, у вас есть метод getSize () в бине, тогда

${pageDividers.size}

Уведомление № ().

РЕДАКТИРОВАТЬ: Извините ... сделал ошибку в исходном сообщении.

...