在合成组件</rich:column>中过滤<rich:column>

时间:2012-08-22 03:33:56

标签: jsf richfaces

希望有人能提供帮助,因为我对此问题非常关注。我在其他地方找不到多少帮助......

高级目标:创建自定义标记,以帮助重用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'属性的方法有如下语法: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 个答案:

答案 0 :(得分:1)

我在使用RichFaces 3.3.3和JSF 1.2时遇到了同样的问题而没有可用的解决方案。

在RichFaces找到一个JIRA-entry,它仍处于打开状态,因此可能不再修复。