2012-08-22 33 views
1

希望有人可以幫忙,因爲我在這個問題上很困難。我在其他地方找不到多少幫助...過濾<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,但這似乎沒有得到回答。

在此先感謝!

回答

1

我正面臨着使用RichFaces 3.3.3和JSF 1.2而沒有可用解決方案的相同問題。

在RichFaces上發現JIRA-entry,它仍然是開放的,因此可能不會再被修復。