需要获取所选 check-boxes 的动态计数

Need to get dynamic count of the selected check-boxes

我有两种类型的 check-boxes,一种用于数据 table header 中的 select所有 check-box,另一种类型 select为每一行计算 check-box。

我正在做一个操作,所以我需要显示确认消息,如何从托管 Bean 中获取 selected check-boxes 的计数。

我的代码是用 JSF 1.2 编写的。

我可以做 select 所有记录,select 条记录,ManagedBean 工作正常,但我需要了解其中有多少被 selected 删除。 这是 JSF 代码,

<i:commandLink id="delete" 
    onclick="if (!confirm('#{managedBean.deleteSelectedCount}')) return false;"
    action="#{managedBean.deleteRecords}"
    title="Delete records"
    immediate="true">
    <i:graphicImage url="images/icons/delete.gif" alt="Delete records" />
</i:commandLink>
 ;
 ;//Some coding
 ;
 //Data table code starts
 <i:dataTable id="caseDataTable"


 <h:column>
    <f:facet name="header">                             
        <i:selectBooleanCheckbox id="selectAllRecords" title="select All records" 
            value="#{managedBean.selectAll}">
                <a4j:support event="onclick"  reRender="caseDataTable,globalMessages" action="#{managedBean.actionSelectAllRecordss}"                                                           onsubmit="showBusyIndicator();" oncomplete="hideBusyIndicator();" />
        </i:selectBooleanCheckbox>                          
    </f:facet>
    <h:outputLabel for="selectCheckbox" value="selectCheckbox"/>
        <i:selectBooleanCheckbox id="selectCheckbox" 
            title="select a record" value="#{managedBean.selected}" >
                <a4j:support event="onclick" reRender="selectAllRecords, globalMessages" action="#{managedBean.actionSelectionChange}"
                  onsubmit="showBusyIndicator();"  oncomplete="hideBusyIndicator();"/>
        </i:selectBooleanCheckbox>
</h:column>

可能的解决方案是使用 h:inputHidden 组件(我认为它存在于 JSF 1.2 中。如果没有,您可以找到一些替代方案)。

例如

  1. h:inputHidden添加到页面

    <h:inputHidden id="selectedCountHidden" value="#{managedBean.deleteSelectedCount}"/>
    
  2. 每次单击 header 复选框或 任意行复选框 ,计算 deleteSelectedCount 值和 re-render h:inputHidden。像

    <i:selectBooleanCheckbox id="selectCheckbox" title="select a record" value="#{managedBean.selected}" >
        <a4j:support event="onclick" reRender="...,selectedCountHidden,..."
    
  3. 现在,由于 h:inputHidden 将始终保持 deleteSeletedCount 值,您可以通过 java 脚本读取其值,因此不需要 re-loading 点击 commandLink

    时的页面
    <i:commandLink id="delete"
         onclick="if(!confirm(document.getElementById('form:selectedCountHidden').value))return false;"..../>
    

请注意,如果您定义了 id 的表单,则需要调用

document.getElementById('form:selectedCountHidden').value

否则直接调用

 document.getElementById('selectedCountHidden').value

无论如何,检查页面源代码,您会发现 p:inputHidden 的确切 id