Передача bean-компонента в качестве параметра facelet и последующего составного компонента вызывает исключение 'идентификатора''*'', преобразованного в нулевое значение

У меня есть простой составной компонент button.xhtml:

<composite:interface>
    <composite:attribute name="action" method-signature="void listener(java.lang.String)"/>
</composite:interface>

<composite:implementation>
    <h:form>
        <h:commandButton value="button" action="#{cc.attrs.action}"/>
    </h:form>
</composite:implementation>

Используется на details.xhtml страница:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:comp="http://java.sun.com/jsf/composite/comp">
    <comp:button action="#{actionBeanParam.doAction('someParam')}"/>
</ui:composition>

details.xhtml страница включена в другую страницу. Обрати внимание на actionBeanParam, Передается в качестве параметра details.xhtml, На странице отображаются две кнопки (для целей тестирования) - первая кнопка просто для проверки работы составного компонента. Вторая кнопка - это то, чего я хочу добиться:

<h:body>
    <comp:button action="#{actionBean.doAction('simpleButton')}"/>
    <ui:include src="/WEB-INF/blocks/details.xhtml">
        <ui:param name="actionBeanParam" value="#{actionBean}"/>
    </ui:include>
</h:body>

И, наконец, боб:

@Named
@SessionScoped
public class ActionBean implements Serializable {
    public void doAction(String param) {
        System.out.println("Param: " + param);
        // some action
    }
}

Когда я нажимаю верхнюю кнопку, она работает нормально. В консоли я вижу:

Param: простая кнопка

Когда я нажимаю нижнюю кнопку (мой сценарий), она выдает исключение:

javax.el.

Я обнаружил похожую проблему здесь: управляемый компонент как параметр Facelet позволяет составному компоненту предотвращать разрешение

Но я не могу использовать обходной путь из этой проблемы, потому что у моего действия есть параметр.

У меня есть обходной путь для переустановки параметра через c:set в details.xhtml:

<c:set var="actionBeanParam" scope="view" value="#{actionBeanParam}" />

но это работает неправильно, когда details.xhtml включен более одного раза.

Что я использую: JBoss EAP 6.2.1, Mojarra 2.1.19-jbossorg-1

Какие-либо предложения?

0 ответов

Другие вопросы по тегам