5

我在我的 JSF 项目中使用 Passthrough 元素,需要做类似的事情:

<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

有谁知道我该如何解决这个问题?

4

1 回答 1

3

看起来只是您的 Mojarra 版本中的一个错误。它适用于我当前最新的 2.2.12 版本。

您可以利用传递方法参数的 EL 2.2 特性来解决它。另请参阅在 EL 中调用直接方法或带有参数/变量/参数的方法。它肯定在您的环境中可用,因为它#{myBean.acao()}显然没有引发 EL 异常(EL 2.2 之前不支持此语法)。

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

如果您绝对需要在动作侦听器事件期间调用 setter,例如因为您想在设置值无效的情况下action通过抛出来控制调用,另请参阅action 和 actionListener 之间的差异,然后声明 a 。AbortProcessingExceptionjsf:actionListener

<a href="#" jsf:actionListener="#{myBean.setObject(localObject)}" jsf:action="#{myBean.acao}">click me</a>
于 2015-12-14T20:33:45.520 回答