如何在dataTable中的每一行上添加单选按钮

时间:2011-12-17 17:47:36

标签: jsf java-ee

我想要列表中每一行的单选按钮。这个单选按钮将用于指示哪个答案是正确的。但是,当它在数据表中时,我如何设法获得它?我尝试在表格周围添加<h:form><h:selectOneRadio>,然后在每列中添加<f:selectItem .../>,但它不起作用。

        <h:dataTable id="answerTable"
            value="#{questionHandler.answers}" var="answer">
            <h:column>
                <p>
                    <o:inputText id="sd" value="#{answer.description}"
                        styleClass="text" size="100" />
                </p>
            </h:column>

            <h:column>
            <!-- I want a radiobutton in each row-->
            </h:column>
        </h:dataTable>

1 个答案:

答案 0 :(得分:3)

对于标准JSF组件,如果没有引入自定义JavaScript函数,只要单击单选按钮,就取消选中同一列上的所有其他单选按钮,这是不可能的。它们不是按相同的输入字段名称分组的(这是一个基于HTML的先决条件,只要检查了其中一个组,就取消选中所有其他按钮)。 JSF在字段名称中插入表行索引,另请参阅webbrowser中生成的HTML输出。

但是,您似乎正在使用OpenFaces,因此您应该能够将<o:dataTable>组件与<o:singleRowSelection>结合使用来实现功能要求。有关详细信息,请阅读OpenFaces developer documentation on DataTable Row Selection。以下是其开发者文档的相关摘录:

<o:dataTable var="product"
             value="#{ProductsList.products}" >
  <o:singleRowSelection
          rowData="#{ProductList.selectedProduct}"
          action="#{ProductList.processProductSelection}"/>
  <o:column>
    <f:facet name="header">
      <h:outputText value="name"/>
    </f:facet>
    <h:outputText value="#{product.name}" />
  </o:column>
</o:dataTable>

几乎所有其他JSF组件库也提供类似的功能,例如PrimeFacesRichFaces。如果我没有发现你已经使用了一个支持这个功能的组件库,那么我就会推荐这个。