如何在JSF / Richfaces中向列标题添加复选框?

时间:2011-05-30 13:47:50

标签: jsf richfaces

我需要为<rich:dataTable>中的每个列标题添加复选框。选中的复选框表示相应的列将包含在要从表数据生成的pdf报告中。其他要求是:列必须是可排序的,我必须能够混合<rich:column><rich:columns>标记。

我试图通过几种不同的方式实现这一目标。如果我像这样使用<rich:columnGroup>

<rich:dataTable>
  <f:facet name="header">
    <rich:columnGroup>
      <rich:column sortBy="#{bean.foo}">
        <h:outputText value="bar"/>
        <h:selectBooleanCheckbox value=.../>
      </rich:column>
      <rich:columns ...>
        <h:outputText value="bar"/>
        <h:selectBooleanCheckbox value=.../>
      </rich:columns>
    </rich:columnGroup>
  </f:facet>
  <rich:column>
    <h:outputText value="#{bean.baz}"/>
  </rich:column>
  <rich:columns value=... var=...>
    <h:outputText value="#{bean.foobar}"/>
  </rich:columns>
</rich:dataTable>

然后排序图标不显示。或者,我尝试将文本和复选框放在<h:panelGroup>中,例如:

<rich:dataTable>
  <rich:column sortBy="#{bean.foo}">
    <f:facet name="header">
      <h:panelGroup layout="block">
        <h:outputText value="bar"/>
        <h:selectBooleanCheckbox value=.../>
      </h:panelGroup>
    </f:facet>
    <h:outputText value="#{bean.baz}"/>
  </rich:column>
  <rich:columns ...>
    <f:facet name="header">
      <h:panelGroup layout="block">
        <h:outputText value="bar"/>
        <h:selectBooleanCheckbox value=.../>
      </h:panelGroup>
    </f:facet>
    <h:outputText value="#{bean.foobar}"/>
  </rich:columns>
</rich:dataTable>

这样一切都会显示出来,但当我点击复选框时会触发列排序,这不是我想要的。

我在网上搜索了答案,但没有发现我的问题。当我点击第二个代码示例中的复选框时,是否有人知道更好的方法来执行此类操作或至少如何避免排序?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您是否尝试使用此类标题:

<rich:columns value="#{bean.columns}" var="#{column}">
    <rich:column>
        <f:facet name="header">
            <h:panelGroup>
                <h:outputText value="#{column.title}" />
                <br />
                <h:selectBooleanCheckbox value="#{column.selected}" />
            </h:panelGroup>
        </f:facet>

        <!-- Column data -->
    </rich:column>
</rich:columns>

注意我现在使用RichFaces 4.0.0 / JSF 2.0,因此rich:columns不再存在,但可以用c:forEach替换。希望这有帮助!

亚历。