我想要列表中每一行的单选按钮。这个单选按钮将用于指示哪个答案是正确的。但是,当它在数据表中时,我如何设法获得它?我尝试在表格周围添加<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>
答案 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组件库也提供类似的功能,例如PrimeFaces和RichFaces。如果我没有发现你已经使用了一个支持这个功能的组件库,那么我就会推荐这个。