我正在尝试在 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。