【问题标题】:enable single h:selectbooleancheckbox from many inside rich:datatable in JSF在 JSF 中的许多 Rich:datatable 中启用单个 h:selectbooleancheckbox
【发布时间】:2013-01-16 11:47:25
【问题描述】:

我有一个rich:datatable,其中有很多列,其中一列是h:selectbooleancheckbox。我希望用户一次从数据表中的许多复选框中选择一个复选框。如果一个复选框被选中一次,我没有问题我可以将它提交到表单。 When a second checkbox is selected, for example, the former one should be deselected.我怎么能这样做?预先感谢您的帮助... 这是我正在使用的数据表:

<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>

【问题讨论】:

    标签: java javascript jsf-2 ajax4jsf


    【解决方案1】:

    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>
    

    类似于上面的内容,其中 deselectAll 是您的 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);     
              }
        } 
    }
    

    【讨论】:

    • 或者,使用 primefaces DataTable - RadioCheckbox
    • f:ajax 在我的应用程序中不受支持。相反,我使用的是 a4j:support。 a4j:support 有 actionListener 属性,我猜它可以用来代替 f:ajax 监听器。如何在 bean 方法中取消选择所有这些?你能提供更多信息吗?谢谢...
    • 如果问题可以在Javascript中解决,如何解决?或者我怎么能用backing bean中的方法解决它???任何帮助将不胜感激......
    • 我编辑了我的答案以给出一个更清晰的例子。它将沿着这些方向发展。您可以使用 Javascript 实现相同的功能,但使用分页的表格可能会出现问题。
    • 首先,我的表格没有使用分页。我有一个可滚动的数据表,所以我不使用分页。我怎样才能用Javascript解决它。在我的 Jsf 页面中,我编写了类似 (()) 的代码。但是,我不知道如何在支持 bean 中取消选择所有复选框。 bean 中应该循环什么?我还在后台 bean 中绑定了数据表。
    猜你喜欢
    • 2013-11-07
    • 2011-04-30
    • 1970-01-01
    • 2017-01-07
    • 2014-03-24
    • 2014-10-14
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    相关资源
    最近更新 更多