Вызовите прямые методы или методы с аргументами / переменные / параметры в EL

Вам нужно поместить группу захвата вокруг номера, чтобы вы могли скопировать ее в замену.

Кроме того, sub - это метод re, а не строковый метод. Вам нужно передать строку в качестве аргумента и присвоить результат.

obj = re.sub(r",(\d+),", r",'\1',", obj)

\1 заменяется тем, что соответствует группе захвата (\d+) номер 1.

25
задан BalusC 14 October 2015 в 21:19
поделиться

2 ответа

В стандартном EL до EL 2.2 из Java EE 6 нельзя напрямую вызывать такие методы, как
# {bean.method ()} , или вызывать методы с аргументами, например # {bean.method (arg1, arg2) .

Если обновление до контейнера, совместимого с EL 2.2 / Java EE 6 (Tomcat 7, Glassfish 3, JBoss AS 6 и т. Д.), Невозможно, и в настоящее время вы используете EL 2.1 / Java EE 5 (Tomcat 6, Glassfish 2 , JBoss AS 4 и т. Д.), То лучше всего установить JBoss EL . JBoss EL - это реализация, совместимая с EL 2.1, которая поддерживает те же функции, что и EL 2.2. Для установки JBoss EL нужно поместить jboss-el.jar в / WEB-INF / lib и добавить следующее в web.xml , предполагая что вы используете Mojarra:

<context-param>     
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>

Или, когда вы используете MyFaces:

<context-param>     
    <param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
    <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
</context-param>

Альтернативой для в вашем конкретном случае является использование JSTL fn: length :

<h:outputText value="#{fn:length(bean.list)}" />

Другой альтернативой является добавление геттера к bean-компоненту, который возвращает List # size () или, в некоторых конкретных случаях, пользовательскую функцию EL .


Обратите внимание, что вызов методов с аргументами в EL не является специфической функцией JSF 2.0. Это особенность EL 2.2. EL 2.2 является частью Java EE 6, частью которого также является JSF 2.0. Так что это похоже на особенность JSF 2.0, но это не так. JSF 2.0 обратно совместим с Servlet 2.5 / EL 2.1, в котором эта функция отсутствует. С другой стороны, JSF 1.x полностью совместим с Servlet 3.0 / EL 2.2, поэтому эту функцию также можно было бы использовать в JSF 1.x тогда, также используя JBoss EL на Servlet 2.5 / EL 2.1.

55
ответ дан 28 November 2019 в 20:36
поделиться

Ответ BalusC правильный, однако, когда вы используете maven, вы должны исключить транзитивную зависимость el-api 1.0, например:

<dependency>
    <groupId>org.jboss.seam</groupId>
    <artifactId>jboss-el</artifactId>
    <version>2.0.0.GA</version>
    <!-- exclude el-api 1.0 transitive dependency -->
    <exclusions>
        <exclusion>
            <groupId>javax.el</groupId>
            <artifactId>el-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
1
ответ дан Hrotkó Gábor 28 November 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: