Как узнать длину списка на языке выражений JSF?

Как получить длину ArrayList с помощью выражения 9X_java-libraries JSF EL?

#{MyBean.somelist.length}

не работает.

120
2

  • @GBa вы можете использовать # ...
5
Общее количество ответов: 5

Ответ #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) }

171
3

  • fn, вероятно, лучший вариант, к сожалению, он доступен только ...

Ответ #2

Ответ на вопрос: Как узнать длину списка на языке выражений JSF?

Вы имеете в виду size(), не так ли?

#{MyBean.somelist.size()}

у меня 9X_jdk работает (с использованием JBoss Seam с 9X_java-se расширениями Jboss EL)

64
1

  • @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 проблему.

14
0

Ответ #4

Ответ на вопрос: Как узнать длину списка на языке выражений JSF?

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


На экране отображается размер таблицы

Пример: Table Size = 5

9X_jre

7
0

Ответ #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: фрагмент ниже работает нормально


    

2
0