`
徜徉の小溪
  • 浏览: 448132 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ZK客户端编程之Checkbox复选框的(全选/全不选)

    博客分类:
  • ZK
阅读更多

on June 30, 2010, I have met a question In ZK client programming, 使用 ZK的方便之处就是基于注  解"@{}",但所有的事物都是双刃剑,当我们使用注解实现AfterCompse接口 zk自动帮我们绑定后台的对象,但当我们对同一对象重用时,我们必须还需在后台把它的实例给销毁,然后重新绑定对象.这样的一来一回会减低我们的开发效率.
        所以使用ZK注解开发人员应该考虑相应系统的复杂性和重用性后酌情处理。
        下面的例子是在开发中动态生成Component组件    并使用客户端技术JQuery 实现功能
 
         1.后台Java类中动态生成Grid 容器组件的子组件 把在这些组件创建时绑定数据然后再返回给zul页面显示数据.
 

Java代码 

package com.linktel.linkFax.web.zk.controller;  
  
import java.awt.Checkbox;  
import java.util.Iterator;  
import java.util.List;  
  
  
import org.apache.commons.lang.StringUtils;  
import org.zkoss.zk.ui.Components;  
import org.zkoss.zk.ui.event.Event;  
import org.zkoss.zk.ui.event.EventListener;  
import org.zkoss.zk.ui.ext.AfterCompose;  
import org.zkoss.zkplus.databind.AnnotateDataBinder;  
import org.zkoss.zkplus.spring.SpringUtil;  
import org.zkoss.zul.Window;  
import org.zkoss.zul.api.Combobox;  
import org.zkoss.zul.api.Div;  
import org.zkoss.zul.api.Grid;  
import org.zkoss.zul.api.Label;  
import org.zkoss.zul.api.Row;  
import org.zkoss.zul.api.Rows;  
import com.linktel.linkFax.domain.Authority;  
import com.linktel.linkFax.domain.Role;  
import com.linktel.linkFax.service.AuthorityService;  
import com.linktel.linkFax.service.RoleService;  
import com.linktel.linkFax.web.zk.util.ZkUtils;  
  
  
public class AuthorityController extends Window implements AfterCompose {  
  
      
    private static final long serialVersionUID = 1L;  
  
    private Role role = new Role();  
    private Authority authority=new Authority();  
    private List<Authority>  authorities;  
    private List<Role> roles;  
  
    protected Grid gdAuthorities;  
    protected AnnotateDataBinder binder;  
    private Combobox cbxRole;  
  
  
    public Role getRole() {  
        return role;  
    }  
  
    public void setRole(Role role) {  
        this.role = role;  
    }  
  
      
  
    public Authority getAuthority() {  
        return authority;  
    }  
  
    public void setAuthority(Authority authority) {  
        this.authority = authority;  
    }  
  
      
    public List<Authority> getAuthorities() {  
        return authorities;  
    }  
  
    public void setAuthorities(List<Authority> authorities) {  
        this.authorities = authorities;  
    }  
  
    public List<Role> getRoles() {  
        return roles;  
    }  
  
    public void setRoles(List<Role> roles) {  
        this.roles = roles;  
    }  
  
    @Override  
    public void afterCompose() {  
        Components.wireVariables(this, this);  
        Components.addForwards(this, this);  
        init();  
    }  
  
    public void onCreate() {  
        binder = (AnnotateDataBinder) this.getAttribute("binder", true);  
    }  
      
  
    /* 
    *   页面加载实现afterComposer()方法初始化 
    *   动态创建Grid组件Rows中的Checkbox 组件并绑定数据 
    */  
    @SuppressWarnings("unchecked")  
    public void init() {  
        RoleService roleService = (RoleService) SpringUtil  
                .getBean("roleService");  
        roles = roleService.getRolesAll();  
  
        AuthorityService authService = (AuthorityService) SpringUtil  
                .getBean("authorityService");  
         authorities = authService.getAuthoritiesAll();  
        Rows rows=gdAuthorities.getRowsApi();  
        List<Row> rowList=rows.getChildren();  
        for(int i=0;i<authorities.size();i++){  
              Authority authority=  authorities.get(i);  
            Row row=new org.zkoss.zul.Row();  
            Div div=new org.zkoss.zul.Div();  
            org.zkoss.zul.api.Checkbox chk=new org.zkoss.zul.Checkbox();  
            Label lblId=new org.zkoss.zul.Label();  
            lblId.setValue(authority.getId().toString());  
            Label lblDisName=new org.zkoss.zul.Label();  
            lblDisName.setValue(authority.getDisplayName());  
            chk.setParent(div);  
            lblId.setParent(div);  
            div.setParent(row);  
            lblDisName.setParent(row);  
            rowList.add(row);  
        }  
    }  

    
 以上我们实现了,动态生成组件绑定数据,下面我们来实现Zul页面(全选)Checkbox 对动态生成组件的(全选/选不选)
          
Xml代码

<?xml version="1.0" encoding="utf-8"?>  
<?page  id="authorityPage"?>  
<?xel-method prefix="c" name="hasPermission"   
class="com.linktel.linkFax.web.zk.util.AuthorityTools"   
signature="com.linktel.linkFax.web.zk.util.AuthorityTools  hasPermission(java.lang.String)"?>  
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"  root="./authorityWin"?>  
<window id="authorityWin"  
    use="com.linktel.linkFax.web.zk.controller.AuthorityController" width="100%"  
    xmlns:h="http://www.w3.org/1999/xhtml"  
    xmlns:n="http://www.zkoss.org/2005/zk/native" xmlns="http://www.zkoss.org/2005/zul"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd"  
    xmlns:w="http://www.zkoss.org/2005/zk/client">  
          <grid id="gdAuthorities" mold="paging" paginal="@{pagingId}"  
                        fixedLayout="true">  
                        <columns>  
                            <column>  
                                <checkbox  w:onCheck="  
                                         var allCtrl = this;  
                                      jq('@checkbox',this.parent.parent.nextSibling).each(  
                                            function(i,chk){  
                                                var c =zk.Widget.$(chk);  
                                                if(allCtrl.isChecked()){  
                                                        c.setChecked(true);  
                                                }else{    
                                                        c.setChecked(false);  
                                                }  
                                        });"></checkbox>  
                            </column>  
                            <column></column>  
                        </columns>  
                        <rows>  
                        </rows>  
                    </grid>  
</window>  

 

 

 

   首先我们客户端编程需要引入命名空间 xmlns:w=http://www.zkoss.org/2005/zk/client  

         ZK引擎是基于Jquery实现的, 我们使用zk给我们提供的JQuery类库   ZK中w:onCheck="" 在用户选中一个复选按钮时触发一个oncheck客户端事件,jq(@window,this.parent.nextSibling).each(...);@window是checkbox组件类型,this.parent.nextSibling是找到当前组件的父组件的同级组件;each(.....)对嵌套的组件进行遍历,each(....)中定义匿名函数,function(i,chk){...} chk参数就是被迭代的子组件,zk5.0.2中checkbox其实不具有客户端checkbox的任何行(action)为,所以我们必须用zk.Widget.$(chk);转换成Widget客户端的组件这样它才真正具有了checkbox的行为(action).转换成widget的组件后我们就可以在客户端对checkbox进行

(全选/全部选).

 

以上的功能实现是在和同事(张学化)的讨论下完成的。

2
0
分享到:
评论

相关推荐

    javascript 实现复选框全选/取消功能

    ### JavaScript 实现复选框全选/取消功能 在网页开发中,经常需要用到复选框全选或取消的功能。本文将详细介绍如何通过JavaScript实现这一功能,并解析提供的代码片段。 #### 1. 功能概述 本功能的目标是实现一个...

    js与jQuery实现checkbox复选框全选/全不选的方法

    本文实例讲述了js与jQuery实现checkbox复选框全选/全不选的方法。分享给大家供大家参考,具体如下: 先来看看JavaScript实现checkbox复选框全选/全不选的方法。这应该是一个比较实用的前端技巧吧,很多时候我们都...

    js控制复选框全选、全不选

    在JavaScript编程中,"js控制复选框全选、全不选"是一个常见的需求,尤其在数据表或者选项列表中,用户可能希望一次性选中或取消所有复选框。这个功能可以通过编写简单的JavaScript代码实现。这里我们将深入探讨如何...

    juqery实现复选框全选/反选demo源码

    在上面的代码中,`#checkAll`是“全选”按钮的ID,`$('input[type=checkbox]')`选择了所有复选框,`not(this)`排除了当前点击的“全选”按钮,`prop('checked', this.checked)`设置了这些复选框的选中状态。...

    复选框全选全不选JS代码

    本文将深入探讨“复选框全选全不选JS代码”的实现原理、应用场景以及如何优化这段代码,以便开发者能够更好地理解和运用到实际项目中。 ### 复选框全选与全不选的概念 复选框(Checkbox)是Web表单中常见的元素,...

    JS实现CheckBox复选框全选、不选或全不选功能

    CheckBox复选框JS实现全选、不选、全不选功能,很简单,具体内容如下 思路: 1、获取元素 2、给全选 不选 反选添加点击事件 3、用for循环checkbox 4、把checkbox的checked设置为true即实现全选 5、把checkbox的...

    spreadjs_列头添加复选框全选功能-demo.zip

    在实际应用中,我们经常需要在列头添加复选框来实现全选或全不选的功能,以便于用户对大量数据进行操作。本篇将深入探讨如何利用SpreadJS实现这一功能,并结合提供的压缩包文件进行解析。 首先,我们关注的是"demo....

    复选框全选、全不选和反选的效果实现.rar

    本资源"复选框全选、全不选和反选的效果实现.rar"聚焦于JavaScript(JS)实现复选框的全选、全不选和反选功能,这对于创建交互性强、用户体验良好的网页表单至关重要。全选、全不选和反选功能使得用户可以便捷地管理...

    QTableWidget表头添加复选框实现全选功能

    有时候,我们希望在表格的表头中添加复选框,以便实现全选或取消全选的功能,这在处理大量数据时尤其有用。本篇文章将详细解释如何在`QTableWidget`的表头中添加复选框并实现全选功能。 首先,我们需要了解`...

    jquery 复选框 全选,全不选

    在上面的代码中,我们有一个ID为`selectAll`的全选复选框和一个ID为`uncheckAll`的全不选按钮。复选框的name属性设为`option`,这样它们将被视为一组。 接下来,我们需要用jQuery来监听这两个按钮的点击事件,并...

    DataGridView 复选框全选。

    接下来,我们需要监听`DataGridView`的`CellClick`事件,以便当用户点击列头(即复选框)时,触发全选或全取消的操作。在事件处理函数中,我们可以检查被点击的单元格是否为复选框列的列头,并根据当前所有行的选中...

    javascript复选框实现批量选择

    2. 在列表下方放置一个“全选/全不选”复选框,当选中“全选/全不选”复选框后,列表中的所有复选框都选中,当取消“全选/全不选”复选框后,列表中的所有复选框都取消选中。 3. 当列表中的复选框都取消选中后,...

    实现table表格checkbox复选框的全选 反选

    在上面的代码中,我们有一个全选复选框(`#selectAll`)和多个行内复选框(`.itemCheckbox`)。全选复选框用于控制所有行内复选框的状态。 接下来,我们使用JavaScript(通常配合jQuery库,但也可以使用原生JS)来...

    js 实现 复选框全选(二)

    js 实现 复选框全选(二)! 值得下载看看!资源免费,大家分享!!

    Pyqt5 QTableWidget/QTableView 行表头添加复选框全选功能

    本篇文章将详细探讨如何在`QTableWidget`或`QTableView`的表头中添加复选框,并实现全选/全不选的功能。 首先,我们需要了解`QTableWidgetItem`和`QHeaderView`。`QTableWidgetItem`是`QTableWidget`中的基本元素,...

    DataGridView表头添加checkbox实现全选反选

    这里我们检查表头`CheckBox`的状态,并同步到每一行的复选框。当然,这需要在数据绑定到`DataGridView`之前,确保第一列是可勾选的`DataGridViewCheckBoxCell`。 为了使用户的选择能够被程序识别和处理,我们需要在...

    jquery复选框全选操作

    `$(this).is(':checked')`用于判断全选复选框是否被选中,`$('.child-checkbox').prop('checked', true/false)`则是用来改变所有子复选框的选中状态。 此外,为了完善用户体验,我们还可以添加一个反向操作,即当...

    vue+vant-UI框架实现购物车的复选框全选和反选功能

    点击全选复选框时,调用`checkAll`方法来更新购物车中每个商品的`isChecked`状态,同时也更新`selectedData`数组和`AllChecked`状态。 ```javascript methods: { checkAll() { let list = this.shoppingListData....

    JS实现复选框全选全不选以及子复选框带动全选框的选中

    然后,对每个子复选框添加了`change`事件监听器,当子复选框状态改变时,检查所有子复选框是否都处于同一状态,进而更新全选复选框的状态。 综上所述,通过JavaScript实现复选框全选全不选以及子复选框带动全选框的...

Global site tag (gtag.js) - Google Analytics