希望有人能提供帮助,因为我对此问题非常关注。我在其他地方找不到多少帮助......
高级目标:创建自定义标记,以帮助重用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,但似乎没有回答。
提前致谢!
答案 0 :(得分:1)
我在使用RichFaces 3.3.3和JSF 1.2时遇到了同样的问题而没有可用的解决方案。
在RichFaces找到一个JIRA-entry,它仍处于打开状态,因此可能不再修复。