JSF - Richfaces 3.3.3丰富的数据表 - 使用两个标题进行排序和过滤?

时间:2013-07-01 16:32:36

标签: jsf sorting filter datatable richfaces

我正在尝试在JSF中的现有rich:datatable中的每个列的标头中添加一个过滤器。我使用了Exadel演示来添加过滤器,结果很好,但它也从上部标题中删除了排序功能。我想将sort函数保留在上面的标签头中,并过滤第二个inputText头。

作为一个快速而肮脏的例子,这是基本结构:

<rich:dataTable id="thetable" value="#{stuff.list}" var="s">
    <f:facet name="header">
        <rich:columnGroup>
            <rich:column sortBy="#{s.field1}">
                <h:outputText="Field 1" />
            </rich:column>
        </rich:columnGroup>
    </f:facet>
    <rich:column>
        <f:facet name="header">
            <h:inputText value="#{stuffSorter.field1}">
                <a4j:support event="onkeyup" reRender="thetable" ignoreDupResponses="true"
                     requestDelay="700" onComplete"setCaretToEnd(event);" />
            </h:inputText>
        </f:facet>
    </rich:column>
</rich:dataTable>

当然会有更多的列,而setCaretToEnd只是一个Javascript函数,它将插入符保留在列过滤器的末尾。这几乎是正确的。我有两个标题。顶部的一个是列标签,下面的一个是过滤器,结果列在下面。我已经构建了过滤类,并且它的工作非常出色。但是,我似乎无法找到一种方法来将sort函数重新放回到最顶端的标题中。如果我将“sortBy”字段放在过滤器框旁边,它确实有效,但我更倾向于将其放在上面,但似乎插入过滤器列的数据正在阻止它。

我在这里遗漏了什么,或者这对于富人来说是不太可能的:dataTable?我可以使用名称+ sort然后在同一个标​​题中相互叠加过滤器,但我也没有运气。试图将两个元素放入facet(outputText和inputText)从不显示outputText,即使用s:div单独包装它们也是如此。我使用bean进行排序,但奇怪的是,我正在使用的项目是使用Richfaces 3.3.3并缺少org.richfaces.component.SortOrder,尽管它在richfaces-ui-3.3中有许多其他项目。 0.3-final.jar。

1 个答案:

答案 0 :(得分:1)

在Richfaces 3.3中,支持标题和过滤器构面。放在标题构面中的内容将显示在顶部。过滤器代码可放置在过滤器构面内,该构面将显示在标题下方。请检查以下问题:Filter Facet is not working in Richface 4.3x,那里会显示旧格式的richfaces 3.3。

 <f:facet name="filter">
</f:facet>