结合表排序和过滤

时间:2016-02-22 14:18:13

标签: sorting jsf filter richfaces

我正在尝试使用Richfaces 3.3.3版创建一个可排序表。 我已经设法使用内置功能实现表排序和过滤。内置过滤不符合我的需要,所以我实现了外部过滤。

到目前为止,这是我在前端得到的结果:

{{1}}

此代码生成以下内容: Generated table

过滤和排序工作正常,但是使用columnGroup元素时布局似乎不起作用,当在columnGroup元素或各列中混合和匹配filterValue / filterBy属性时,我无法使其工作

当我只使用内置过滤和排序时,它就是这样的:

{{1}}

以上是jsf的结果。我希望我的第一个解决方案能够像这样显示,但似乎不可能,因为我无法向我的方面声明两个子元素。实现外部过滤需要我自己添加inputText元素进行过滤,并输出outputText以显示列名称。

enter image description here

这种方法的唯一缺陷是内置过滤器是有限的:

  

这是内置功能。它使用“startsWith”函数进行过滤。

Source

有没有办法过滤和排序?我没有使用外部+外部或外部/内置管理。有没有什么方法可以覆盖内置过滤器的功能来代替使用“containsIgnoreCase”函数?

非常感谢任何帮助。如果您需要更多信息,请告诉我。我用这两个例子作为我的资料来源:

1 个答案:

答案 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>

最终输出: enter image description here

希望这有助于某人。