Передача 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
Какие-либо предложения?