1

希望有人可以提供帮助,因为我非常坚持这个问题。我在其他地方找不到太多帮助...

高级目标:创建一个自定义标签,有助于在 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="#{bean[fcnName]}"其中 fcnName 只是一个字符串(参见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”解析为空。为了检查 bean 是否被真正识别,我让它通过打印一个字符串<h:outputText value="#{bean.someString}"/> (删除有问题的 filterMethod=...)并且没有问题。因此,问题似乎完全取决于 filterMethod 收到的任何内容。我在这里发现了一个我认为非常相似的问题,但似乎没有得到回答。

提前致谢!

4

1 回答 1

1

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

在 RichFaces找到了一个JIRA 条目,该条目仍然打开,因此可能不再修复。

于 2013-08-21T06:41:44.970 回答