使用动态 ID 选择 Multiple SelectManyCheckBox 中的所有项目

2023-12-03

我想使用 JSF 顶部的 PrimeFaces 组件来选择某些复选框组中的所有复选框。

我的代码是这样的:

<h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">
    <p:outputLabel value="Confere:" style="font-weight:bold!important" />
    <p:selectManyCheckbox
        value="#{funcionarioBean.funcionario.permissaoConfere.stringArray}">
        <f:selectItem itemLabel="Consulta" itemValue="C" />
        <f:selectItem itemLabel="Edição" itemValue="E" />
        <f:selectItem itemLabel="Deleção" itemValue="D" />
        <f:selectItem itemLabel="Inclusão" itemValue="I" />
        <f:selectItem itemLabel="Relatório" itemValue="R" />
        <f:selectItem itemLabel="Check All"/>
    </p:selectManyCheckbox>
</h:panelGrid>
<h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">
    <p:outputLabel value="Visitante:" style="font-weight:bold!important" />
    <p:selectManyCheckbox
        value="#{funcionarioBean.funcionario.permissaoVisitante.stringArray}">
        <f:selectItem itemLabel="Consulta" itemValue="C" />
        <f:selectItem itemLabel="Edição" itemValue="E" />
        <f:selectItem itemLabel="Deleção" itemValue="D" />
        <f:selectItem itemLabel="Inclusão" itemValue="I" />
        <f:selectItem itemLabel="Relatório" itemValue="R" />
        <f:selectItem itemLabel="Check All"/>
    </p:selectManyCheckbox>
</h:panelGrid>
<h:panelGrid columns="2" style="margin-bottom:10px" cellpadding="5">
    <p:outputLabel value="Ocorrências:" style="font-weight:bold!important" />
    <p:selectManyCheckbox
        value="#{funcionarioBean.funcionario.permissaoOcorrencia.stringArray}">
        <f:selectItem itemLabel="Consulta" itemValue="C" />
        <f:selectItem itemLabel="Edição" itemValue="E" />
        <f:selectItem itemLabel="Deleção" itemValue="D" />
        <f:selectItem itemLabel="Inclusão" itemValue="I" />
        <f:selectItem itemLabel="Relatório" itemValue="R" />
        <f:selectItem itemLabel="Check All"/>
    </p:selectManyCheckbox>
</h:panelGrid>

我尝试使用发布的代码here但只有当页面上只有一组复选框时,它才有效。


将其包装在可重复使用的复合组件中,如下所示:

/resources/composites/selectManyCheckboxAll.xhtml

<ui:component
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:cc="http://xmlns.jcp.org/jsf/composite"
    xmlns:p="http://primefaces.org/ui"
>
    <cc:interface>
        <cc:attribute name="value" />
        <cc:editableValueHolder name="input" targets="checkboxes" />
    </cc:interface>
    <cc:implementation>
        <h:outputStylesheet library="composites" name="selectManyCheckboxAll.css" target="head" />
        <h:outputScript library="composites" name="selectManyCheckboxAll.js" target="head" />
        <div id="#{cc.clientId}" class="checkboxes-all" 
            data-widget-checkboxes="#{p:widgetVarFromContext('checkboxes', cc).split('\'')[1]}" 
            data-widget-all="#{p:widgetVarFromContext('all', cc).split('\'')[1]}">
            <p:selectManyCheckbox id="checkboxes" value="#{cc.attrs.value}">
                <cc:insertChildren />
            </p:selectManyCheckbox>
            <div class="all">
                <p:selectBooleanCheckbox id="all" />
                <p:outputLabel for="all" value="Check all" />
            </div>
        </div>
    </cc:implementation>          
</ui:component>

/resources/composites/selectManyCheckboxAll.css

.checkboxes-all {
    white-space:  nowrap;
}

.checkboxes-all .ui-selectmanycheckbox,
.checkboxes-all .all {
    display: inline-block;
    vertical-align: middle;
}

.checkboxes-all .all .ui-chkbox {
    margin: 1px 4px 0 0;
    vertical-align: top;
}

.checkboxes-all .all label {
    display: inline-block;
    margin-top: 4px;
}

/resources/composites/selectManyCheckboxAll.js

$(document).on("click", ".checkboxes-all .all .ui-chkbox-box, .checkboxes-all .all input", function() {
    var $composite = $(this).closest(".checkboxes-all");
    var widgetAll = PrimeFaces.widgets[$composite.data("widget-all")];
    var widgetCheckboxes = PrimeFaces.widgets[$composite.data("widget-checkboxes")];

    widgetCheckboxes.inputs.prop("checked", !widgetAll.isChecked()).click();
});

$(document).on("click", ".checkboxes-all .ui-selectmanycheckbox input", function() {
    var $composite = $(this).closest(".checkboxes-all");
    var widgetAll = PrimeFaces.widgets[$composite.data("widget-all")];

    if (!$(this).is(":checked") && widgetAll.isChecked()) {
        widgetAll.uncheck();
    }
});

Usage:

<html xmlns:my="http://xmlns.jcp.org/jsf/composite/composites">
...
<my:selectManyCheckboxAll value="#{bean.selectedItems}">
    <f:selectItem itemLabel="Consulta" itemValue="C" />
    <f:selectItem itemLabel="Edição" itemValue="E" />
    <f:selectItem itemLabel="Deleção" itemValue="D" />
    <f:selectItem itemLabel="Inclusão" itemValue="I" />
    <f:selectItem itemLabel="Relatório" itemValue="R" />
</my:selectManyCheckboxAll>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用动态 ID 选择 Multiple SelectManyCheckBox 中的所有项目 的相关文章

  • JSF a4j:设置“禁用”时命令按钮不起作用

    当我在 a4j commandButton 上包含 disabled 属性时 不会执行该按钮的操作 去掉 禁用 属性会使其正常工作 我没有进行任何特殊的验证 据我所知 也没有看到任何验证错误消息 这是我的页面的一部分
  • 这种设计模式在 JavaScript/jQuery 中被称为什么?

    我正在查看 JavaScript 源代码光滑网格 https github com mleibman SlickGrid 我注意到 slick grid js 具有以下结构 function Slick Grid extend true w
  • AJAX .post 异步

    以下具体执行什么操作 ajax type POST async false vs ajax type POST async true 这意味着行为有什么区别 From jQuery 站点 http api jquery com jQuery
  • 如何防止点击 时页面刷新

    我试图在用户单击时阻止页面刷新
  • 如何以编程方式将文件上传到网站?

    我必须将文件上传到服务器 该服务器仅公开带有文件上传按钮的 jsf 网页 通过 http 我必须自动化一个进程 作为java独立进程完成 该进程生成一个文件并将文件上传到服务器 遗憾的是 必须上传文件的服务器不提供FTP或SFTP 有没有办
  • Ajax 中 POST 数据大小有限制吗?

    我正在尝试使用 jQuery Ajax 将一组数据从我的页面发送到 MVC 操作 这是我的 jQuery 代码 btnSave click function result tblMatters tbody tr mattersRow eac
  • 在 Django 中 AJAX 发布后重定向

    我使用 Django 的内置 DeleteView 并为success url属性 现在在我的模板中 我通过 JQuery 的 post 方法触发此视图 当该项目被删除时 我不会被重定向到success url 经过一番查找 发现好像是AJ
  • 在 Google Analytics 中记录 JavaScript 错误

    我正在尝试获取有关我的网络应用程序中发生的 JavaScript 错误的信息 并在 Google Analytics 中使用事件记录这些错误 我这样做如下 document ready function var sendAnalyticsE
  • 使用jquery将Json字符串解析为html div

    我有这样的 json 字符串 common search strBusinessName Sun Shine Vision strAddress Amulia St Madhava Pharmacy Jn intPhone cache ta
  • 使用 Javascript 旋转图像

    首先 我目前正在使用 JQuery 因此 JQuery 解决方案可行 我想将图像旋转动态 X 度 每秒计算一次 现在我用这个完美地工作了Jquery旋转插件 http code google com p jqueryrotate 图像每秒完
  • 添加天数日期选择器 JS

    我在使用日期选择器向日期添加天数时遇到问题 我知道这个问题已经被问过很多次了 但是我们有不同的代码实现 这就是为什么我需要任何了解这个问题的人的帮助 添加天数时 必须是周六和周日被排除在外 我有这个代码
  • 使用 javascript 暂停 CSS 动画并跳转到动画中的特定位置

    我有一个完全用CSS动画构建的无尽滑块 我希望能够使用javascript onlcick和键盘输入 来操纵动画 我希望能够从一帧快速运行动画 即加速到另一帧 以便在按下引用滑块中特定图像的按钮时产生跳跃效果 另外 我希望能够通过键盘输入逐
  • 缩放不同宽度的图像以适应行并保持相等的高度

    我有三张图片 全部是不同宽度 但每个相同高度 我希望这些图像位于响应行中 以便这三个图像的组合宽度为屏幕宽度的 100 所有图像具有相同的高度 每个图像保持其纵横比 并且图像不会被裁剪 一种方法是根据每个图像的宽度 在 CSS 中为每个图像
  • 如何等待第一次画布重绘,直到 @font-face-font 加载?

    我有一个 HTML5 画布并用它编写文本context fillText 使用 font face font 使用 Firefox 3 6 显示页面我遇到问题 在画布的第一次绘制上 字体尚未下载 因此文本将以标准字体显示 我找到了一个 解决
  • JSF 和库的不明确性

    在花了一些时间使用 servlet 和 JSP 之后 现在我正在尝试了解一些有关 JSF 的知识 我已经学习了基础知识 做了几个简单的例子 对 工作流程 有了基本的了解 但我仍然无法理解 javax faces webapp FacesSe
  • 在 jQuery 中添加 ID?

    是否有任何方法可以像添加类一样添加 ID addClass ID是一个属性 您可以使用attr http docs jquery com Attributes attr keyvalue功能 element attr id newID 我不
  • Electron:jQuery 未定义

    问题 在使用 Electron 进行开发时 当您尝试使用任何需要 jQuery 的 JS 插件时 即使您使用脚本标签加载到正确的路径 该插件也找不到 jQuery 例如 p Click me p jQuery should be loade
  • Backbone.js 和本地存储。必须指定“url”属性或函数

    我正在提高有关 Backbone js 的知识 并从教程中获取了此代码示例 http bardevblog wordpress com 2012 01 16 understanding backbone js simple example
  • 类型错误:$.param.querystring 不是 Yii 中的函数

    我正在使用文本字段进行搜索 这样做时我收到错误类型错误 param querystring 不是函数 我怎样才能摆脱这个 检查您的页面中是否多次包含 jquery js 我有同样的错误 原因是 yii 已
  • jQuery 仅附加一次

    所以我有这个 jQuery document ready function var nav nav var logo img src img logo png window scroll function if this scrollTop

随机推荐