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 –

相關問題