1

我正在尝试在 JSF 中现有的 rich:datatable 中向每一列的标题添加过滤器。我使用Exadel演示添加了过滤器,效果很好,但它也从上部标题中删除了排序功能。我想将排序功能保留在上标签标题中,并在第二个 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 函数,它将插入符号保留在列过滤器的末尾。这几乎是恰到好处。我得到两个标题。顶部是列标签,正下方是过滤器,结果列在其下方。我已经建立了过滤类,它工作得很好。但是,我似乎无法找到将排序函数返回到最顶层标题的方法。如果我将“sortBy”字段放在过滤器框旁边,它确实有效,但我更愿意将它放在上面,但似乎插入过滤器列中的数据阻止了这种情况。

我是否在这里遗漏了一些东西,或者这对于rich:dataTable 是不是不太可能?我可以使用名称 + 排序,然后在同一个标​​题中将过滤器放在一起,但我也没有运气。尝试将这两个元素都放入构面(outputText 和 inputText)永远不会显示 outputText,即使使用 s:div 单独包装它们也是如此。我会使用 bean 进行排序,但奇怪的是,我正在从事的项目使用 Richfaces 3.3.3 并且缺少 org.richfaces.component.SortOrder,尽管它在richfaces-ui-3.3 中有许多其他项目.3-final.jar。

4

1 回答 1

1

在 Richfaces 3.3 中,支持标题和过滤器方面。您放入标题方面的内容将显示在顶部。您可以将过滤器代码放置在过滤器方面,该过滤器将显示在标题下方。请检查以下问题:Filter Facet 在 Richface 4.3x 中不起作用,此处显示的是 Richfaces 3.3 的旧格式。

 <f:facet name="filter">
</f:facet>
于 2013-10-14T05:17:45.067 回答