我正在尝试使用Richfaces 3.3.3版创建一个可排序表。 我已经设法使用内置功能实现表排序和过滤。内置过滤不符合我的需要,所以我实现了外部过滤。
到目前为止,这是我在前端得到的结果:
{{1}}
过滤和排序工作正常,但是使用columnGroup元素时布局似乎不起作用,当在columnGroup元素或各列中混合和匹配filterValue / filterBy属性时,我无法使其工作
当我只使用内置过滤和排序时,它就是这样的:
{{1}}
以上是jsf的结果。我希望我的第一个解决方案能够像这样显示,但似乎不可能,因为我无法向我的方面声明两个子元素。实现外部过滤需要我自己添加inputText元素进行过滤,并输出outputText以显示列名称。
这种方法的唯一缺陷是内置过滤器是有限的:
这是内置功能。它使用“startsWith”函数进行过滤。
有没有办法过滤和排序?我没有使用外部+外部或外部/内置管理。有没有什么方法可以覆盖内置过滤器的功能来代替使用“containsIgnoreCase”函数?
非常感谢任何帮助。如果您需要更多信息,请告诉我。我用这两个例子作为我的资料来源:
答案 0 :(得分:1)
这是我的最终解决方案。它完成了这项工作,但它并不漂亮。为简洁起见,我删除了所有其他列。 这样做的原因是:
为了理解内置和外部的含义,这两个示例在顶部包含选项卡,其中包含两个示例: - Table Sorting - Table Filtering
<h:form>
<rich:dataTable
columnClasses="listItemLink, listItem, listItem, listItemLink"
styleClass="listHeaderBackground" headerClass="listHeader">
<rich:column>
<f:facet name="header">
<h:inputText
value="#{publicServiceList.currentTitleFilterValue}">
<a4j:support event="onkeyup" reRender="serviceTable , ds"
ignoreDupResponses="true" requestDelay="200"
oncomplete="setCaretToEnd(event);" />
</h:inputText>
</f:facet>
</rich:column>
</rich:dataTable>
<rich:dataTable value="#{publicServiceList.serviceList}"
id="serviceTable" var="_service" rows="20" reRender="ds"
sortMode="single"
columnClasses="listItemLink, listItem, listItem, listItemLink"
headerClass="listHeader" rowClasses="odd, even"
styleClass="listHeaderBackground">
<rich:column
filterExpression="#{fn:containsIgnoreCase(_service.title, publicServiceList.currentTitleFilterValue)}"
sortBy="#{_service.title}">
<f:facet name="header">
<h:outputText
value="#{messages['public.page.service_A-Z.list.title.SERVICENAME']}" />
</f:facet>
<s:link view="/public/PublicService.xhtml"
value="#{_service.title}" propagation="none"
id="publicServiceView">
<f:param name="serviceId" value="#{_service.id}" />
</s:link>
</rich:column>
</rich:dataTable>
</h:form>
希望这有助于某人。