【问题标题】:Need to get dynamic count of the selected check-boxes需要获取所选复选框的动态计数
【发布时间】:2017-11-28 06:55:42
【问题描述】:

我有两种类型的复选框,一种是用于数据表标题中的 selectAll 复选框,另一种类型是为每一行选择复选框。

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

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

我可以选择所有记录,选择记录,ManagedBean 工作正常,但我需要知道其中有多少被选中删除。 这是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>

【问题讨论】:

  • 托管 bean 的“范围”是什么?
  • 再想一想...我认为最适合您的是发布minimal reproducible example 否则您可能最终得不到好的答案(因为它是 JSF 1.2)
  • 托管 bean 范围是会话。
  • 好的。也请发minimal reproducible example
  • 请在有问题的正文中发布代码,而不是在 cmets 中。从 cmets 读取代码很难。

标签: checkbox jsf-1.2


【解决方案1】:

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

例如

  1. 在页面中添加h:inputHidden

    <h:inputHidden id="selectedCountHidden" value="#{managedBean.deleteSelectedCount}"/>
    
  2. 每次单击标题复选框或任何行复选框,计算deleteSelectedCount 值并重新渲染h:inputHidden。类似的东西

    <i:selectBooleanCheckbox id="selectCheckbox" title="select a record" value="#{managedBean.selected}" >
        <a4j:support event="onclick" reRender="...,selectedCountHidden,..."
    
  3. 现在,由于h:inputHidden 将始终保持deleteSeletedCount 的值,您可以通过java 脚本读取它的值,因此当您单击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

【讨论】:

  • 感谢您的快速回复。
猜你喜欢
  • 2017-02-01
  • 2013-04-28
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 2011-12-22
  • 2021-07-01
  • 2019-08-05
相关资源
最近更新 更多