Как узнать длину списка на языке выражений JSF?
Как получить длину ArrayList
с помощью выражения 9X_java-libraries JSF EL?
#{MyBean.somelist.length}
не работает.
- @GBa вы можете использовать # ...
Ответ #1
Ответ на вопрос: Как узнать длину списка на языке выражений JSF?
Да, поскольку какой-то гений в комитете 9X_.java по созданию Java API решил, что, хотя некоторые 9X_j2se классы имеют члены size()
или атрибуты length
, они не 9X_java-expression-language будут реализовывать getSize()
или getLength()
, которые JSF и 9X_jstl большинство других стандартов требовать, вы 9X_jdk не можете делать то, что хотите.
Это можно 9X_jdk сделать двумя способами.
Первый: добавьте 9X_el в свой объект Bean функцию, которая возвращает 9X_jdk длину:
In class MyBean: public int getSomelistLength() { return this.somelist.length; } In your JSF page: #{MyBean.somelistLength}
Два: если вы используете Facelets 9X_jre (о, Боже, почему вы не используете Facelets!), вы 9X_java-expression-language можете добавить пространство имен fn и использовать 9X_javax функцию length
In JSF page: #{ fn:length(MyBean.somelist) }
- fn, вероятно, лучший вариант, к сожалению, он доступен только ...
Ответ #2
Ответ на вопрос: Как узнать длину списка на языке выражений JSF?
Вы имеете в виду size(), не так ли?
#{MyBean.somelist.size()}
у меня 9X_jdk работает (с использованием JBoss Seam с 9X_java-se расширениями Jboss EL)
- @nemo - это решается в отладочном выпуске JSR245: http://blogs.sun.com/kchung/entry/jsr_245_mr_part_i (с точки зрения ...
Ответ #3
Ответ на вопрос: Как узнать длину списка на языке выражений JSF?
Примечание. Это решение лучше подходит для старых версий 9X_core-java JSTL. Для версий выше 1.1 я рекомендую использовать 9X_core-java fn:length(MyBean.somelist)
, как предлагает Bill James.
This article содержит более подробную 9X_jstl информацию, включая другое возможное решение;
Проблема 9X_javax в том, что мы пытаемся вызвать метод размера 9X_java-se списка (который является допустимым методом 9X_.java LinkedList), но это не совместимый с JavaBeans 9X_jsp метод получения, поэтому выражение list.size-1 9X_jdk не может быть вычислено.
Есть два способа 9X_java-expression-language решить эту дилемму. Во-первых, вы можете 9X_jre использовать библиотеку RT Core, например:
Во-вторых, если 9X_java-se вы хотите избежать использования кода Java 9X_el на страницах JSP, вы можете реализовать 9X_jdk простой класс-оболочку, который содержит 9X_j2se список и обеспечивает доступ к свойству 9X_java-libraries размера списка с помощью метода получения, совместимого 9X_j2se с JavaBeans. Этот bean-компонент указан 9X_jdk в Листинге 2.25.
Проблема с методом c_rt 9X_j2se заключается в том, что вам нужно получить 9X_java переменную из запроса вручную, потому что 9X_j2se иначе он не распознает ее. На этом этапе 9X_oraclejdk вы вводите много кода для того, что должно 9X_java быть встроено в функциональность. Это ГИГАНСКИЙ недостаток 9X_java-se EL.
В итоге я использовал метод "обертки", вот 9X_j2se класс для него;
public class CollectionWrapper { Collection collection; public CollectionWrapper(Collection collection) { this.collection = collection; } public Collection getCollection() { return collection; } public int getSize() { return collection.size(); } }
Третий вариант, о котором 9X_jdk еще никто не упомянул, - это поместить размер 9X_jstl вашего списка в модель (при условии, что 9X_jsf вы используете MVC) в качестве отдельного 9X_java-se атрибута. Итак, в вашей модели у вас будет 9X_el «someList», а затем «someListSize». Это 9X_java-api может быть самый простой способ решить эту 9X_java-expression-language проблему.
Ответ #4
Ответ на вопрос: Как узнать длину списка на языке выражений JSF?
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
На экране отображается размер таблицы
Пример:Table Size = 5
9X_jre
Ответ #5
Ответ на вопрос: Как узнать длину списка на языке выражений JSF?
Спустя 7 лет ... решение facelets все еще 9X_j2se отлично работает для меня как пользователя 9X_javax jsf
включить пространство имен как xmlns:fn="http://java.sun.com/jsp/jstl/functions"
и используйте 9X_jsp EL как #{fn:length(myBean.someList)}
, например, при использовании в jsf 9X_el ui: фрагмент ниже работает нормально
-
3
-
4
-
5
-
4
-
2
-
7
-
1
-
3
-
1
-
3
-
4
-
2
-
6
-
1
-
2
-
2
-
4
-
3
-
4
-
1
-
1
-
3
-
6
-
3
-
2
-
4
-
2
-
2
-
3
-
2
-
2
-
1
-
1
-
3
-
6
-
1
-
1
-
4
-
3
-
4
-
8
-
4
-
3
-
4
-
2
-
5
-
1
-
3
-
3
-
8