2008-10-22 7 views
14

Я работаю над JSP, где мне нужно вызвать методы на объекте, которые исходят от Bean. В предыдущей версии страницы не используется JSTL, и она работает правильно. Моя новая версия имеет настройки, как это: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 объекта ?

ответ

27

При использовании оператора точки для доступа к свойству в JSTL, ${pageDividers.size} (без () необходимо) результатов в вызове метода с именем getSize().
Поскольку java.util.List предлагает метод под названием size() (вместо getSize()), вы не сможете получить доступ к длине списка с помощью этого кода.


Для того, чтобы получить доступ к размеру списка, JSTL предлагает Fn: длина функция, используемая как

${fn:length(pageDividers)} 

Обратите внимание, что для того, чтобы использовать пространство имен п, вы должны объявить это следующим образом:

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 

Кроме того, та же функция может использоваться с любым типом коллекции, а также с Stri ngs тоже.

+0

Это работает, спасибо! – 2008-10-22 21:14:40

2

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

${pageDividers.size} 

Извещение нет().

EDIT: Извините ... сделал ошибку в исходном сообщении.