Использование функций Omnifaces EL в составном компоненте с Mojarra 2.2.5

После обновления до JSF Mojarra 2.2.5 я получаю следующее исключение при использовании функции formatNumber Omnifaces el. Это происходит только внутри составного компонента. Обычный Facelet работает нормально.

javax.el.ELException: функция «of: formatNumber» не найдена

это мой составной компонент:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:jsf="http://xmlns.jcp.org/jsf"
      xmlns:cc="http://xmlns.jcp.org/jsf/composite"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:of="http://omnifaces.org/functions">

    <cc:interface>
        <cc:attribute name="cart" required="true" type="org.ead.eeb.order.ShoppingCart" />
        <cc:attribute name="allowCouponRemove" required="true" type="java.lang.Boolean" />
        <cc:attribute name="removeCouponBean" type="java.lang.Object" />
        <cc:attribute name="removeCouponAction" type="java.lang.String" />
        <cc:attribute name="removeCouponProperty" type="java.lang.String" />
    </cc:interface>

    <cc:implementation>
        <h4>Übersicht</h4>
        <table class="table">
            <tbody>
                <c:forEach items="#{cc.attrs.cart.items}" var="item">
                    <tr>
                        <td><abbr title="#{item.description}">#{item.name}</abbr></td>
                        <td class="text-right">#{of:formatNumber(item.totalAmount, '#0.00')}  €</td>
                    </tr>
                </c:forEach>
                <tr>
                    <td>Mehrwertsteuer (#{cc.attrs.cart.taxRatePercentage} %)</td>
                    <td class="text-right">#{of:formatNumber(cc.attrs.cart.totalTax, '#0.00')} €</td>
                </tr>
            </tbody>
            <tfoot>
                <tr class="active">
                    <td><strong>Gesamtbetrag</strong></td>
                    <td class="text-right"><strong>#{of:formatNumber(cc.attrs.cart.totalOrderAmount, '#0.00')} €</strong></td>
                </tr>
            </tfoot>
        </table>
        ...
    </cc:implementation>

thanks in advance for your help :)

Изменить: проблема возникает, если я использую значение из cc.attrs.*. Если я использую значение непосредственно как атрибут, все работает хорошо. Есть идеи?

Edit2: возможен обходной путь с помощью следующего кода

<c:set var="test" value="#{cc.attrs.value}" />
#{of:formatNumber(test, '#0.00')} 

но это довольно некрасиво. Я не могу найти свою ошибку.


person jheider    schedule 27.01.2014    source источник
comment
Напоминает мне о старом жуке Мохарра. Что произойдет, если вы поместите xmlns:of="http://omnifaces.org/functions" внутрь <cc:implementation>?   -  person BalusC    schedule 10.02.2014
comment
Да, я нашел старые темы об этом. Но размещение объявления пространства имен в теге реализации не имеет значения.   -  person jheider    schedule 10.02.2014
comment
Странный. Попробую на 2.2.5...   -  person BalusC    schedule 10.02.2014
comment
Ну, работает для меня. Какая версия OmniFaces и какой производитель/версия контейнера? Какой была старая версия Mojarra, на которой это работало у вас раньше?   -  person BalusC    schedule 10.02.2014
comment
Я запускаю Omnifaces 1.7 на Glassfish 4 (сборка 89). Раньше я использовал Mojarra 2.2.4, все было нормально.   -  person jheider    schedule 10.02.2014
comment
хм, это странно, я только что протестировал его на минимальном примере, и он тоже работает. Поэтому я должен выяснить, в чем проблема в моем реальном приложении.   -  person jheider    schedule 11.02.2014
comment
обновление: проблема возникает, если я использую значение из cc.attrs.*. Если я использую значение непосредственно как атрибут, все работает хорошо. Но я не могу найти никакого решения для этого. Есть идеи?   -  person jheider    schedule 11.02.2014
comment
Та же проблема с той же настройкой.   -  person djmj    schedule 25.04.2014
comment
Еще более интересно, что это даже происходит, если в рамках фильтра было выдано перенаправление на другой сайт (который не использует никаких функций и отображает правильно).   -  person djmj    schedule 26.05.2014
comment
У меня такая же проблема с #{p:component(...)} внутри составного компонента. Это не универсальная проблема.   -  person skybber    schedule 05.08.2014
comment
Проблема в отсутствующих пространствах имен в экземпляре NamespaceHandler.   -  person skybber    schedule 05.08.2014
comment
Создана проблема java.net/jira/browse/JAVASERVERFACES-3469.   -  person djmj    schedule 12.10.2014


Ответы (1)


Созданная мной проблема была помечена как не исправимая, так как есть обходной путь:

Замена всех удобных встроенных вызовов el типа #{foo} на <h:outputText value="#{foo}"/>.

https://java.net/jira/browse/JAVASERVERFACES-3469

Очень неудобно и громоздко. Многие регрессии из 2.2.4 -> 2.2.5.

person djmj    schedule 13.01.2015