4

我用我的JSF项目直通元素,需要做一些与此类似:<F:setPropertyActionListener>父的类型了ActionSource的不是,类型为:com.sun.faces.component.PassthroughElement

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

但使用直通元素有像下面尽我的前端更多的控制:

<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 

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

+0

感谢您对术语@BalusC的修正。我会看看我的版本是否与此相同! –

+0

感谢您的帮助,切换到版本2.2.12,它的工作! @BalusC –

回答

3

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

您可以通过使用传递方法参数的EL 2.2功能来解决这个问题。另见Invoke direct methods or methods with arguments/variables/parameters in EL。它肯定在你的环境中可用,因为#{myBean.acao()}显然没有抛出EL异常(在EL 2.2之前不支持这种语法)。

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

如果您绝对需要在动作侦听器事件中调用setter,例如因为如果设置值无效,您想通过投掷AbortProcessingException来控制action的调用,另请参阅Differences between action and actionListener,然后声明jsf:actionListener

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

感谢您的帮助,切换到版本2.2.12,它的工作! @BalusC –

+0

不客气。记录,你最初使用哪个版本?然后,我可以根据需要查找跟踪器中的相关问题报告和错误修复版本。 – BalusC

+0

我使用的版本是2.2.1 @BalusC –

相关问题