Передача метода в составной компонент выполняет метод напрямую

Я пытаюсь создать стандартизированную панель кнопок, которая будет отображаться на большинстве наших экранов. Поскольку кнопки всегда будут одинаковыми, за исключением некоторых действий, подпись составного компонента такова:

<composite:interface>

<composite:attribute required="true" name="fallbackOutcomeOnClose" type="java.lang.String"/>
<composite:attribute name="saveAction" method-signature="void action()"/>
<composite:attribute name="resetAction" method-signature="void action()"/>
<composite:attribute default="@form" name="processOnSave" type="java.lang.String"/>

</composite:interface>

<composite:implementation>
<partials:navigationButton title="#{msg['common.close']}" fallbackOutcome="#{cc.attrs.fallbackOutcomeOnClose}"/>

<c:if test="#{null ne cc.attrs.saveAction}">
    <p:commandButton title="#{msg['common.save']}" value="#{msg['common.save']}"
                     action="#{cc.attrs.saveAction}"
                     styleClass="btn btn-primary pull-right"
                     process="@this #{cc.attrs.processOnSave}"
                     update="@all"/>
</c:if>
<c:if test="#{null ne cc.attrs.resetAction}">
    <partials:warningWithConfimButton title="msg['common.reset']" action="#{cc.attrs.resetAction}" type="reset" styleClass="pull-right"/>
</c:if>

Когда я добавляю этот CC на мой взгляд, вот так:

<partials:standardButtonPanel fallbackOutcomeOnClose="someview" resetAction="#{zef0302View.reset()}"
                              saveAction="#{zef0302View.save()}" processOnSave="zef0302_allg_det_id zef0302_periodika_id zef0302_indexierung_id"/>

Метод zef0302View.save() вызывается напрямую и не передается в ЦК. Что я делаю неправильно? Я уже передал методы в качестве атрибутов другим компонентам, но не вижу, что я сделал по-другому.

Я использую Wildfly 8.1 с JSF 2.2.

Спасибо за помощь.

[Редактировать]

Проблема заключалась не в передаче атрибутов, а в проверке их наличия в ЦК. Видимо при тестировании такого метода <c:if test="null ne cc.attrs.resetAction"/> этот метод вызывается. То же самое верно для тестирования not empty cc.attrs.resetAction,

Чтобы правильно проверить наличие атрибута метода, не вызывая его <c:if test="cc.getValueExpression('actionMethod')"> (или положить его в rendered блок везде где нужно).

Решение пришло из другого вопроса, на который Smutje был так любезен, чтобы обратить мое внимание (см. Комментарии).

0 ответов

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