当前位置: 首页 > 知识库问答 >
问题:

使用h:selectBooleanCheckbox删除JSF数据表中的多行

蔚楷
2023-03-14

我已经按照帖子的说明选择了多行

这是我的代码:申请者earch.xhtml

 <ui:composition template="/WEB-INF/templates/main.xhtml"> 

<ui:define name="menu">
    <ui:include src="/protected/views/menu.xhtml"/>
</ui:define>    

<ui:define name="content">

    <h:outputScript target="body">
      formatMyTable();

    </h:outputScript>
    <h3>Search for Applicants</h3>
    <h:form id="searchForm" class="form-search">    
       <h:panelGroup id="results" class="table-responsive">   


           <h:outputText id="informationMessage" 
                         value="#{applicantSearchBacking.infoMessage}" 
                         rendered="#{applicantSearchBacking.infoMessage ne null}"
                         class="informationMessage"/>
            <div class="btn-toolbar">
            <h:commandButton value="Delete Selected" onclick="if (! confirm('Are you sure you want to delete the selected applicants?')) return false" action="#{applicantSearchBacking.removeSelectedApplicants}" class="btn btn-danger btn-large pull-right">
                            <f:ajax render=":searchForm:results :searchForm:messages" onevent="formatMyTable" 
                                    />
             </h:commandButton>
            </div>
           <br/>
           <h:dataTable value="#{applicantSearchBacking.applicantList}" 
                        var="currentApplicant" styleClass="table table-hover table-condensed table-bordered"   
                        >

               <h:column>
                   <f:facet name="header">
                       Applicant ID
                   </f:facet>
                   #{currentApplicant.applicantId}
               </h:column>
               <h:column>
                   <f:facet name="header">
                       First Name
                   </f:facet>
                   #{currentApplicant.firstName}
               </h:column>                   
               <h:column>
                   <f:facet name="header">
                       Middle Name
                   </f:facet>
                   #{currentApplicant.middleName}
               </h:column>   

               <h:column>
                   <f:facet name="header">
                       Last Name
                   </f:facet>
                   #{currentApplicant.lastName}
               </h:column>   

               <h:column>
                   <f:facet name="header">
                       Actions
                   </f:facet>

                   <!-- User Access control section <c:if test=""> -->
                   <h:link value="Edit" outcome="#{applicantSearchBacking.editApplicant()}" class="btn btn-primary btn-sm">
                       <f:param name="myApplicantId" value="#{currentApplicant.applicantId}">
                       </f:param>
                   </h:link>    
                  <!-- </c:if> -->

                   <!-- <c:if test=""> -->
                 <h:selectBooleanCheckbox id="del_checkbox"  value="#{applicantSearchBacking.checked[currentApplicant.applicantId]}">

                 </h:selectBooleanCheckbox>   

                  <!-- </c:if> -->

               </h:column>                     

           </h:dataTable> 


       </h:panelGroup>  

       <h:messages id="messages" class="errorMessage"/>
    </h:form>
</ui:define>

应用程序搜索支持。Java语言

private Map<Integer, Boolean> checked = new HashMap<>(); 

 public void removeSelectedApplicants()
{

     try {
         List<Applicant> applicantsToDelete = new ArrayList<>();

        for (Applicant applicant : applicantList) {
            Boolean itemChecked = checked.get((applicant.getApplicantId()));

        if (itemChecked !=null && itemChecked) {
            applicantsToDelete.add(applicant);
    }
    }

    applicantManager.removeSelectedApplicants(applicantsToDelete);
    if (!checked.isEmpty())
        infoMessage = "Applicant(s) deleted successfully";


    checked.clear();

}

共有1个答案

劳昊明
2023-03-14

只有在回发时保留完全相同的数据模型时,此构造才会起作用。因此,如果您的bean是请求范围的,那么它在后构造中创建的应用程序列表必须与显示表单时完全相同。否则,您需要将bean设置为viewscope。在任何情况下,我假设applicationlist的getter方法不执行任何业务逻辑,只返回属性。

  • 为什么JSF多次调用getter

根据您的问题更新,还有另一个可能导致此构造失败的潜在错误:

<f:ajax render=":searchForm:results :searchForm:messages" onevent="formatMyTable" />

执行

<f:ajax execute="@form" ... />
 类似资料:
  • 主要内容:JSF数据表添加删除实例JSF中有一个叫作的控件,可用来渲染和格式化表格。使用,我们可以迭代收集或数组数组来显示数据。 具有以简单的方式修改其数据的属性。 要使用,我们需要添加以下HTML头。 以下JSF标签 - 被渲染成以下HTML标签。 JSF数据表添加删除实例 打开 NetBeans IDE 创建一个Web工程:DataTableAddDelete,其目录结构如下所示 - 创建以下文件代码,文件:index.xht

  • 我想从以下页面中删除“符号”、“名称”和“收益通话时间”下的所有公司信息:https://finance.yahoo.com/calendar/earnings 到目前为止,我只知道公司名称,但我得到了一个错误: NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id='cal-res-table']]/div[1]/ta

  • 我是JSP的新手,我正在尝试创建一个web界面,用户可以在该界面中输入他们想要删除的信息,并且该信息将在数据库表中删除。 在这里,他们应该输入和,然后应该删除具有两个指定ID的任何数据。但是,它不是从表中删除的。我有个例外 数组索引越界 下面是我的代码:

  • 我正在尝试使用复选框进行标记删除。假设用户有大约10个产品,每个产品都有3个不同的标签。 当前用户只能删除单个标记。每次标记删除后,页面刷新,他可以删除另一个标记。这不是真正的用户友好。这就是为什么我尝试对标记进行多重选择,并在单击一个按钮时删除所有选定的标记。 这就是它现在的样子: 我的问题是我需要产品id标签id来分离它们。 如果按delete(删除)按钮,则会将此数据传递到控制器: 主要的问

  • 操作步骤 1.通过 tableID 实例化一个 TableObject 对象,操作该对象即相当于操作对应的数据表 let MyTableObject = new BaaS.TableObject(tableID) 参数说明 参数 类型 必填 说明 tableID Number 是 数据表 ID 返回参数说明 无数据返回 2.指定 recordID 执行删除操作 MyTableObject.dele