<f: setPropertyActionListener> Родитель не относится к типу ActionSource, тип: com.sun.faces.component.PassthroughElement

Я использую элементы Passthrough в своем проекте JSF, и мне нужно сделать что-то похожее на это:

<h:commandLink action="#{myBean.acao()}" value="click me">
        <f:setPropertyActionListener target="#{myBean.object}" value="#{localObject}"/>
</h:commandLink>

но используя элементы Passthrough для большего контроля над моим интерфейсом, как, например, попытка ниже:

<a href="#" jsf:action="#{myBean.acao()}">click me
        <f:setPropertyActionListener target="#{myBean.object}" value="#{localObject}"/>
</a>

но, видимо, это не работает, я получаю следующее сообщение об ошибке:

<f:setPropertyActionListener> Parent is not of type ActionSource, type is: com.sun.faces.component.PassthroughElement

Кто-нибудь знает, как я мог решить это?

1 ответ

Решение

Похоже, просто ошибка в вашей версии Mojarra. Это работает для меня с текущей последней версией 2.2.12.

Вы можете обойти это, используя функцию EL 2.2 передачи аргументов метода. См. Также Вызов прямых методов или методов с аргументами / переменными / параметрами в EL. Это, безусловно, доступно в вашей среде, как #{myBean.acao()} по-видимому, не выдает исключение EL (этот синтаксис не поддерживается до EL 2.2).

<a href="#" jsf:action="#{myBean.acao(localObject)}">click me</a>

Если вам абсолютно необходимо вызвать установщик во время события слушателя действия, например, потому что вы хотите контролировать вызов action бросая AbortProcessingException если заданное значение недопустимо, см. также Различия между action и actionListener, затем объявите jsf:actionListener,

<a href="#" jsf:actionListener="#{myBean.setObject(localObject)}" jsf:action="#{myBean.acao}">click me</a>
Другие вопросы по тегам