Java 在JSF中的rich:datatable中启用单个h:selectbooleancheckbox

Java 在JSF中的rich:datatable中启用单个h:selectbooleancheckbox,java,javascript,jsf-2,ajax4jsf,Java,Javascript,Jsf 2,Ajax4jsf,我有一个rich:datatable,其中有许多列,其中一列是h:selectbooleancheckbox。我希望用户一次只从datatable中的许多复选框中选择一个复选框。如果选中复选框一次,我可以将其提交到表单。例如,当选中第二个复选框时,应取消选中前一个复选框。我怎么能做到?提前感谢您的帮助。。。 以下是我正在使用的数据表: <rich:dataTable id="vehicleTable" var="vhcl" value="#{tripsBacking.vehicleList

我有一个rich:datatable,其中有许多列,其中一列是h:selectbooleancheckbox。我希望用户一次只从datatable中的许多复选框中选择一个复选框。如果选中复选框一次,我可以将其提交到表单。例如,当选中第二个复选框时,应取消选中前一个复选框。我怎么能做到?提前感谢您的帮助。。。 以下是我正在使用的数据表:

<rich:dataTable id="vehicleTable" var="vhcl" value="#{tripsBacking.vehicleList}"
binding="#{tripsBacking.vehicleTable}" sortMode="single" 
footerClass="dr-table-footer rich-table-footer"
style="width: 500px; margin: 0px; padding: 0px;">

<rich:column id="col1" width="10px" headerClass="dr-table-header rich-table-header">
    <f:facet name="header">

    </f:facet>
    <h:selectBooleanCheckbox title="#{general.select}" >
    </h:selectBooleanCheckbox>
</rich:column>
<rich:column id="col2" label="#{general.vehicleName}" headerClass="dr-table-header rich-table-header" >
    <f:facet name="header">
        <h:outputText value="#{general.vehicleName}" id="vehicleNameLbl" />
    </f:facet>
    <h:outputText value="#{vhcl.vehicle.vehicleName}" id="vehicleNameValue" />
</rich:column>

<rich:column id="col3" label="#{general.vehicleType}" headerClass="dr-table-header rich-table-header" >
    <f:facet name="header">
        <h:outputText value="#{general.vehicleType}"
            id="state_capital" />
    </f:facet>
    <h:graphicImage value="#{vhcl.typeImage}" height="40" width="40" align="left"/>
</rich:column>
<rich:column id="col4" label="#{general.lastMessageDate}"
    headerClass="dr-table-header rich-table-header" > 
    <f:facet name="header">
        <h:outputText value="#{general.lastMessageDate}" id="lastMsgDateLabel" />
    </f:facet>
    <h:outputText value="#{vhcl.messageDate}" id="lastMsgDate" /> 
</rich:column>
<rich:column id="col5a" label="#{general.address}"
    headerClass="dr-table-header rich-table-header" >
    <f:facet name="header">
        <h:outputText value="#{general.address}" id="addressLabel" />
    </f:facet>
    <h:outputText value="#{vhcl.address}" id="addr" />
</rich:column>


Ajax在每次更改时提交,并具有一个操作侦听器方法,该方法将从列表中取消选择以前选择的所有项目

<h:selectBooleanCheckbox title="#{general.select}" >
    <a4j:support event="onclick" listener="#{tripsBacking.selectSingleRow}" reRender="vehicleTable">
       <!-- use property that uniquely identifies a row -->
       <f:attribute name="selectedVehicleName" value="#{general.vehicleName}"/>
    </a4j:support>
</h:selectBooleanCheckbox>

或者,使用primefaces f:ajax在我的应用程序中不受支持。相反,我使用的是a4j:支持。a4j:support有actionListener属性,我想可以用它代替f:ajax listener。如何在bean方法中取消选择它们?你能提供进一步的信息吗?谢谢你…如果这个问题可以用Javascript解决,怎么解决呢?或者我如何用支持bean中的方法解决它???任何帮助都将不胜感激…我编辑了我的答案,以给出一个更清晰的例子。它将沿着这些路线发展。使用Javascript可以实现同样的效果,但使用分页的表可能会出现问题。我有一个可滚动的数据表,所以我不使用分页。我如何用Javascript解决这个问题。在我的Jsf页面中,我编写了类似(())的代码。但是,我不知道在支持bean中如何取消选中所有复选框。在bean中应该循环什么?我还将datatable绑定到支持bean中。
public void selectSingleRow(ActionEvent event) {
    String vehicleName = (String) event.getComponent().getAttributes().get("selectedVehicleName");
    for (Vehicle v : vehicleList) {
          if (!v.getVehicleName.equals(vehicleName)) {
               v.setSelected(false);     
          }
    } 
}