5

JSF プロジェクトでパススルー要素を使用しており、次のようなことを行う必要があります。

<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

これを解決する方法を知っている人はいますか?

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>

アクション リスナー イベント中にセッターを呼び出す必要がある場合 (たとえば、設定値が無効な場合にactionスローすることで の呼び出しを制御したい場合など) は、「 action と actionListener の違い」も参照してから、.AbortProcessingExceptionjsf:actionListener

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