私はこの問題にかなりこだわっているので、誰かが助けてくれることを願っています。私は他の場所で多くの助けを見つけることができません...
高レベルの目標: Richfaces での extendedDataTable の再利用を支援するカスタム タグを作成します。次のようなカスタム タグがあります。
<mytag:customTable bean="#{myBean}"/>
テーブルのコードを含む (簡略化された) ファイルは次のとおりです (table.xhtml)。
<!--...header stuff -->
<ui:component>
<a4j:outputPanel>
<h:form>
<rich:extendedDataTable
value="#{bean.theData}"
var="entity"
id="table">
<rich:column filterMethod="#{...}">
<f:facet name="header">
<h:inputText value="#{bean.filterValue}">
<a4j:support event="onkeyup" reRender="table"/>
</h:inputText>
</f:facet>
<h:outputText value="#{entity.item}"/>
</rich:column>
</rich:extendedDataTable>
</h:form>
</a4j:outputPanel>
</ui:component>
アプリケーションの制約により、<rich:column>
タグ内で filterBy="#{...}" 属性を使用しても、必要なものが得られません。
したがって、filterMethod 属性を使用する必要があります。テーブルをハードコーディングすると、
<rich:column filterMethod="#{bean.filterFunction}">
その後、すべて正常に動作します。ただし、タグをより一般的なものにして、これをハードコーディングしないようにしたいと思います。代わりに、フィルタリング関数の名前 (例: ) も渡したいと思い<mytag:customTable bean="#{myBean}" flFcn="#{myBean.filterFunction}">
ます。問題は、これのどのバージョンも正しく動作しないことです。
他のスレッドを検索すると、「アクション」属性にメソッドを渡す方法が次のような構文になっていることがわかります。action="#{bean[fcnName]}"
ここで、fcnName は単なる文字列です ( http://digitaljoel.nerd-herders.com/2009/08/25を参照)。 /passing-action-methods-in-facelets-using-array-notation/ )。
action の場合、この方法で正しく動作することを確認しました。ただし、この場合、filterMethod を使用すると、これは役に立たないようです (おそらく b/c 関数のシグネチャが異なりますか?)。これらのソリューションに基づいて、次のようなものが必要になります
<mytag:customTable bean="#{myBean}" flFcn="filterFunction">
。<rich:column filterMethod="#{bean[flFcn]}">
EL構文の多くの順列の中で、機能するものは何も見つかりませんでした。毎回、このアプローチは「bean」が null に解決されたという例外をスローします。Bean が実際に認識されたことを確認するために、<h:outputText value="#{bean.someString}"/>
(問題のある filterMethod=... を削除して) 経由で文字列を出力しましたが、問題はありません。したがって、問題は完全に filterMethod が受け取るものにあるようです。ここで非常によく似た問題であると思われるものを見つけましたが、それは答えられていないようです。
前もって感謝します!