希望有人可以幫忙,因爲我在這個問題上很困難。我在其他地方找不到多少幫助...過濾<rich:column>在組成部分
高級別目標:創建自定義標記,以幫助在Richfaces中重用擴展數據表。我有我想是類似於自定義標籤:
<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'屬性的方式具有如下語法:action="#{bean[fcnName]}"
其中fcnName只是一個String(請參閱http://digitaljoel.nerd-herders.com/2009/08/25/passing-action-methods-in-facelets-using-array-notation/)。
我已經確認,這種方式是正確的,當它是一個行動。但是, 這似乎沒有幫助我在這種情況下與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接收。我發現我認爲是非常類似的問題here,但這似乎沒有得到回答。
在此先感謝!