JSP自定义标签(三) 多选控件(2)

JSP 自定义标签 自定义标签是一种特殊类型的 Java 类,它扩展了 JSP 标准标签库 (JSTL) 的功能。通过自定义标签,开发者可以将重复的代码封装成标签,然后在 JSP 页面中重复使用。简单标签(Simple Tag):这种标签不需要处理请求,主要用来处理逻辑操作,并返回字符串。标签文件(Tag File):这种标签通常包含一个 HTML 页面,用于显示标签处理后的结果。自定义标签的核心是 TagHandler 类,它实现了 SimpleTagHandler 接口。@Override// 处理逻辑try { 阅读详情


三、JS代码:multiSelector.js

  	
	// author: HHB      
function showMulti(parentId, name, id, value) {
    var multi = new MultiSelector();
    multi.create(parentId, name, id);
    var str = "[{text:'zs1',value:'1'},{text:'zs2',value:'1'},{text:'zs3',value:'1',selected:'true'},{text:'zs4',value:'1',selected:'true'}]";
    var obj = eval("(" + (value?value:'-1') + ")");
    multi.initItem(obj);
    // alert(multi);
}

MultiSelector = function() {
    this.forSelec = null;
    this.selected = null;
    this.selectedItemL = null;
    this.selectedItemR = null;
    this.valueObj = null;
    this.selectBtn=null;
    this.cancelBtn=null;
    var forSele_="forSele_";
    var selected_="selected_";
    var valueObj_="valueObj_";
    var selectBtn_="selectBtn_";
    var cancelBtn_="cancelBtn_";
    var parent_="multiParent_";

    //根据ID获取多选控件对象
    MultiSelector.prototype.multiSelector=function(id){
        var _this=this;
        this.forSelec=document.getElementById(forSele_+id);
        this.selected=document.getElementById(selected_+id);
        this.valueObj=document.getElementById(id);
        this.selectBtn=document.getElementById(selectBtn_+id);
        this.cancelBtn=document.getElementById(cancelBtn_+id);
        MultiSelector.removeEvent(_this.selectBtn,'click',MultiSelector.itemOnSelect);
        MultiSelector.addEvent(_this.selectBtn,'click',function() {
            MultiSelector.itemOnSelect(_this);
        });
        MultiSelector.removeEvent(_this.cancelBtn,'click',MultiSelector.itemOnSelect);
        MultiSelector.addEvent(_this.cancelBtn,'click',function() {
            MultiSelector.itemOnCancel(_this);
        });
        
        //MultiSelector.clearChildren(document.getElementById(parent_+id));
        //this.create()
    };
    
    //加载本地数据
    MultiSelector.prototype.load=function(data,textField,valueField){
        if(this.forSelec&&this.selected)
        {
            this.clear();
            this.initItem(data,textField,valueField);
        }
    };
    
    MultiSelector.addEvent = function(el, evname, func) {
        if (el.attachEvent) { // IE
            el.attachEvent("on" + evname, func);
        } else if (el.addEventListener) { // Gecko / W3C
            el.addEventListener(evname, func, true);
        } else { // Opera (or old browsers)
            el["on" + evname] = func;
        }
    };
    MultiSelector.removeEvent=function(el, evname, func) {
        if (el.detachEvent) { // IE
            el.detachEvent("on" + evname, func);
        } else if (el.removeEventListener) { // Gecko / W3C
            el.removeEventListener(evname, func, true);
        } else { // Opera (or old browsers)
            el["on" + evname] = null;
        }
    };
    MultiSelector.clearChildren=function(parent)
    {
        while (parent.firstChild) {
              var oldNode = parent.removeChild(parent.firstChild);
              oldNode = null;
            }
    };
    //清空多选控件的选择列表
    MultiSelector.prototype.clear=function()
    {
        var children=null;
        if(this.forSelec)
        {
            MultiSelector.clearChildren(this.forSelec);
        }
        if(this.selected)
        {
            MultiSelector.clearChildren(this.selected);
        }
    };
    //初始化创建元素
    MultiSelector.createElement = function(type, parent) {
        var el = null;
        if (document.createElementNS) {
            el = document.createElementNS("http://www.w3.org/1999/xhtml", type);
        } else {
            el = document.createElement(type);
        }
        if (typeof parent != "undefined") {
            parent.appendChild(el);
        }
        return el;
    };
    
    //初始创建控件元素
    MultiSelector.prototype.create = function(par, name, id) {
        var _this = this;
        var parent = document.getElementById(par);
        var tempTable = MultiSelector.createElement("table");
        parent.appendChild(tempTable);
        var tbody = MultiSelector.createElement("tbody");
        tempTable.appendChild(tbody);
        var tmpTr = MultiSelector.createElement("tr");
        tmpTr.style.verticalAlign = 'middle';
        tbody.appendChild(tmpTr);

        // 供选择列表
        var forSeletd = MultiSelector.createElement("td");
        forSeletd.style.width = '150px';
        forSeletd.style.height = '200px';
        var forSeleDiv = MultiSelector.createElement("div");
        forSeleDiv.id=forSele_+id;
        forSeleDiv.style.width = '150px';
        forSeleDiv.style.height = '200px';
        forSeleDiv.style.border = '2px solid #C9D7F1';
        forSeleDiv.setAttribute("stype", "L");
        this.forSelec = forSeleDiv;
        forSeletd.appendChild(forSeleDiv);
        tmpTr.appendChild(forSeletd);

        // 按钮列表
        var btntd = MultiSelector.createElement("td");
        btntd.style.width = '80px';
        btntd.style.height = '200px';
        var btnDiv = MultiSelector.createElement("div");
        btnDiv.style.width = '80px';
        btnDiv.style.height = '100px';
        // btnDiv.style.border='2px solid #C9D7F1';
        btnDiv.style.floatStyle = 'left';
        btntd.appendChild(btnDiv);
        tmpTr.appendChild(btntd);

        // 选择按钮
        var selectBtn = MultiSelector.createElement("div");
        selectBtn.id=selectBtn_+id;
        selectBtn.style.cursor = 'pointer';
        selectBtn.style.width = '70px';
        selectBtn.style.height = '20px';
        selectBtn.style.border = "#7b9ebd 1px solid";
        selectBtn.style.backgroundColor = "#EBE9ED";
        selectBtn.style.fontFamily = "Verdana,Arial,Helvetica,sans-serif";
        selectBtn.innerHTML = "选择 >>";
        selectBtn.style.marginLeft = 'auto';
        selectBtn.style.marginRight = 'auto';
        MultiSelector.addEvent(selectBtn, "click", function() {
            MultiSelector.itemOnSelect(_this);
        });
        this.selectBtn=selectBtn;
        btnDiv.appendChild(selectBtn);

        // 取消按钮
        var cancelBtn = MultiSelector.createElement("div");
        cancelBtn.id=cancelBtn_+id;
        cancelBtn.style.cursor = 'pointer';
        cancelBtn.style.width = '70px';
        cancelBtn.style.height = '20px';
        // cancelBtn.style.border="1px #000000 solid";
        cancelBtn.style.border = "#7b9ebd 1px solid";
        cancelBtn.style.backgroundColor = "#EBE9ED";
        cancelBtn.style.fontFamily = "Verdana,Arial,Helvetica,sans-serif";
        cancelBtn.innerHTML = "<< 取消 ";
        cancelBtn.style.marginLeft = 'auto';
        cancelBtn.style.marginRight = 'auto';
        cancelBtn.style.marginTop = '30px';
        cancelBtn.style.color = "#000000";
        MultiSelector.addEvent(cancelBtn, "click", function() {
            MultiSelector.itemOnCancel(_this);
        });
        this.cancelBtn=cancelBtn;
        btnDiv.appendChild(cancelBtn);

        // 保存值
        var valueHid = MultiSelector.createElement("input");
        //valueHid.id=valueObj_+id;
        valueHid.type = "hidden";
        valueHid.name = name;
        valueHid.id = id;
        this.valueObj = valueHid;
        btnDiv.appendChild(valueHid);

        // 已选择项列表
        var selectedtd = MultiSelector.createElement("td");
        selectedtd.style.width = '150px';
        selectedtd.style.height = '200px';
        var selectedDiv = MultiSelector.createElement("div");
        selectedDiv.id=selected_+id;
        selectedDiv.style.width = '150px';
        selectedDiv.style.height = '200px';
        selectedDiv.style.border = '2px solid #C9D7F1';
        selectedDiv.style.floatStyle = 'left';
        selectedDiv.setAttribute("stype", "R");
        this.selected = selectedDiv;
        selectedtd.appendChild(selectedDiv);
        tmpTr.appendChild(selectedtd);
    };
    MultiSelector.prototype.initItem = function(jsonValue,textField,valueField) {
        //alert(jsonValue[0].text);
        //var objs = eval("(" + jsonValue + ")");
        var objs=jsonValue;
        var objTmp = null;
        for (objIndex = 0; objIndex < objs.length; objIndex++) {
            objTmp = objs[objIndex];
            this.createItem(objTmp,textField,valueField);
        }
        this.valueObj.value = this.getValue();
    };
    MultiSelector.prototype.createItem = function(valueObj,textField,valueField) {
        if (!valueObj) {
            return;
        }
        var itemDiv = null;
        itemDiv = MultiSelector.createElement("div");
        if(valueField)
        {
            itemDiv.setAttribute('key', valueObj[valueField]);
        }else{
            itemDiv.setAttribute('key', valueObj.value);
        }
        
        itemDiv.style.width = '100%';
        itemDiv.style.cursor = 'pointer';
        if(textField)
        {
            itemDiv.innerHTML = valueObj[textField];
        }
        else
        {
            itemDiv.innerHTML = valueObj.text;
        }
        itemDiv.onblur = MultiSelector.itemOnBlur;
        var _this = this;
        MultiSelector.addEvent(itemDiv, "click", function(event) {
            var srcObj = null;
            if (event && event.srcElement) {
                srcObj = event.srcElement;
            } else {
                srcObj = this;
            }
            MultiSelector.itemOnClick(srcObj, _this);
        });
        // MultiSelector.addEvent(itemDiv,"blur",MultiSelector.itemOnBlur);
        if (valueObj.selected == "true") {
            this.selected.appendChild(itemDiv);
        } else {
            this.forSelec.appendChild(itemDiv);
        }
    };
    MultiSelector.prototype.moveItem = function(direction) {
        if (direction && direction === true) {
            if (this.selectedItemL) {
                this.forSelec.removeChild(this.selectedItemL);
                this.selected.appendChild(this.selectedItemL);
                this.selectedItemR = this.selectedItemL;
                this.selectedItemL = null;
                this.selectedItemR.click();
            }
        } else {
            if (this.selectedItemR) {
                this.selected.removeChild(this.selectedItemR);
                this.forSelec.appendChild(this.selectedItemR);
                this.selectedItemL = this.selectedItemR;
                this.selectedItemR = null;
                this.selectedItemL.click();
            }
        }
        this.valueObj.value = this.getValue();
    };
    MultiSelector.prototype.getValue = function() {
        var valueStr = "";
        var valueObjs = this.selected.childNodes;
        var tmpItem = null;
        for (valueIndex = 0; valueIndex < valueObjs.length; valueIndex++) {
            tmpItem = valueObjs[valueIndex];
            valueStr = valueStr + tmpItem.getAttribute("key") + ",";
        }
        return valueStr;
    };
    MultiSelector.itemOnClick = function(srcObj, obj) {
        var nodes = srcObj.parentNode.childNodes;
        for (index = 0; index < nodes.length; index++) {
            nodes[index].style.backgroundColor = "#ffffff";
        }
        srcObj.style.backgroundColor = "#E0EEE0";
        if (srcObj.parentNode == obj.forSelec) {
            obj.selectedItemL = srcObj;
        }
        if (srcObj.parentNode == obj.selected) {
            obj.selectedItemR = srcObj;
        }
    };
    MultiSelector.itemOnBlur = function() {
        this.style.backgroundColor = "#ffffff";
    };
    MultiSelector.itemOnSelect = function(obj) {
        obj.moveItem(true);
    };
    MultiSelector.itemOnCancel = function(obj) {
        obj.moveItem(false);
    };
};

  	

四、tld定义

 <!-- 多选标签 -->
  <tag>
  	<name>multiselec</name>
  	<tag-class>base.tags.MultiSelectorTag</tag-class>
  	<body-content>empty</body-content>
  	<small-icon></small-icon>
  	<large-icon></large-icon>
  	<description></description>
  	<attribute>
  		<name>id</name>
  		<required>true</required>
  	</attribute>
  	<attribute>
  		<name>name</name>
  		<required>true</required>
  	</attribute>
  	<attribute>
  		<name>value</name>
  		<required>false</required>
  		<rtexprvalue>true</rtexprvalue>
  	</attribute>
  	<example></example>
  </tag>

五、测试标签

 

<%
	String multiStr="[{text:'zs1',value:'1'},{text:'zs2',value:'1'},{text:'zs3',value:'1',selected:'true'},{text:'zs4',value:'1',selected:'true'}]";
%>
<c:multiselec name="multiTest" id="multiTest" value="<%=multiStr %>"/>
或者:
var multiS=new MultiSelector();
multiS.multiSelector("multiTest");
multiS.load(data,"serviceName","serviceId");



jsp select 带多选框 NULL 博文链接:https://ollevere.iteye.com/blog/1718528 立即下载

相关推荐

jsp实现多选列表框

本资源是用js与html控制的代码,用来实现列表框数据可以多选

jsp中实现多按钮

多按钮实现: 实现语句: <%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%> Insert title here <% String book1 = request.getParameter("book1"); String book2 = request.getParameter("book2"); String book3 =

qq_43463977的博客 1652

生信入门(六)——单细胞分析(Seurat)

生信入门(六)——单细胞分析(Seurat) 文章目录生信入门(六)——单细胞分析(Seurat)一、数据导入1、数据来源2、数据导入二、标准预处理1、QC和选择细胞进行进一步分析2、规范化数据3、识别高度可变的特征(特征选择)4、缩放数据三、主成分分析(PCA)1、线性降维2、确定数据集的“维度”四、聚类细胞五、非线性降维(UMAP/tSNE)六、寻找差异表达的特征(簇生物标志物) 一、数据导入 1、数据来源 点击此处下载数据 数据说明:分析10X Genomics提供的外周血单细胞(PBMC)数据集,有

羊羊的博客 6万+

JSP列表中复选框批量选择功能实现

程序员在开发的时候,经常会遇到对查询列表中的记录进行批量操作的情况。 1、实现的方法往往就是在每条记录前面加一个复选框,然后在列表下方放置一个“全选/全不选”复选框。 2、当选中“全选/全不选”复选框后,列表中的所有复选框都选中,当取消“全选/全不选”复选框后,列表中的所有复选框都取消选中。 3、当列表中的复选框都取消选中后,“全选/全不选”复选框也要取消选中。当列表中的复选框都选中后,...

lhbthank的专栏 2940

Cloudflare SaaS 优选IP实战:提升大陆访问速度的配置指南

本文详细介绍了如何通过Cloudflare SaaS优选IP提升中国大陆用户访问速度的配置指南。从基础环境准备到IP筛选方法,再到完整配置流程和效果验证,帮助用户突破免费套餐限制,精准优化网络线路,特别适合跨境电商和面向中国大陆用户的网站优化。

weixin_29231027的博客 685

从SIGGRAPH审稿人视角看:什么样的TOG论文更容易被接收?

本文从SIGGRAPH审稿人视角深入解析TOG论文的审稿标准与投稿策略,揭示如何提升论文接收概率。重点探讨创新性、技术深度、实验验证等核心评分维度,并提供写作技巧与审稿意见应对策略,帮助研究者优化ACM Transactions on Graphics投稿质量。

weixin_33721344的博客 109

jsp中点击一个多选框,实现全选或全不选

当点击页面表头的多选框,则每一行的多选框都会被选中或释放,实现了全选。JSP页面的代码中还实现了多选删除。其实全选也是为了实现多项选择然后删除。多选删除提交的时候用的是超链接提交表单,它的功能就是可以提交表单中没有的值。 js代码 function checkt(){ var checkAll=document.getElementById("checkAll"); conso

ZMC921的博客 8734

配置VScode编译、调试STM32(一)手动配置makefile和debug

做嵌入式的朋友们都应该有过想要有个功能强大的IDE或者编辑器,Keil MDK5、IAR EWARM是用的比较普遍的平台了,但是两者在编辑器方面都比较弱势,当然可以设置 或者使用外部编辑器,像Sourceinsight、notePad++这样,但毕竟需要切换回来进行Build、Debug,非常麻烦。 VScode从发布至今口碑一直很好,而且里面有非常多的插件,比如彩虹括号、Code Runner、...

hanhe0551的博客 4289

JSP、JS实现多选全选操作

类似于淘宝购物车中的多选操作,可以全选操作,也可以部分选择操作 JSP页面显示代码: "+"Apple/苹果6 4.7寸港版删除 "+"Apple/苹果6 4.7寸港版删除 全选代码:   全选 这行代码是用来存放被选择的操作对象的id值; "全选"按钮功能实现代码: $(document).ready(function () { $("#all").cl

a281246240的专栏 6199

[Windows] 发票识别工具。支持xml、pdf、ofd文件。

发票识别是财务自动化中的关键环节,支持多种格式(XML、PDF、OFD)的识别工具能显著提升工作效率。以下介绍基于Windows平台开发此类工具的技术方案。发票识别是财务自动化中的关键环节,支持多种格式(XML、PDF、OFD)的识别工具能显著提升工作效率。以下介绍基于Windows平台开发此类工具的技术方案。

pZC_dqux的博客 668

避免踩坑!WIN11 22H2更新后共享打印机失效的终极解决方案

本文详细解析了WIN11 22H2更新后共享打印机失效的问题,特别是常见的0x00000709错误代码。通过系统更新机制分析、错误代码解读,提供从基础到高级的完整解决方案,包括注册表修复、组策略调整和驱动兼容性处理,帮助用户彻底解决打印机共享问题并预防未来故障。

pp12345的博客 536

JSP 表单处理

我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理。浏览器中使用 GET 和 POST 方法向服务器提交数据。 GET 方法 GET方法将请求的编码信息添加在网址后面,网址与编码信息通过"?"号分隔。如下所示: http://www.runoob.com/hello?key1=value1&key2=value2 GET方法是浏览器默认传递参数的方法,一些敏感信息,如密码等建议不使用GET方法。 用get时,传输数据的大小有限制 (注意不是参数的个数有限制),最大为1024字节。 P

qq_44336097的博客 518

机器学习算法原理:详细介绍各种机器学习算法的原理、优缺点和适用场景

现在,我们将进入到机器学习的核心部分——算法原理。在本篇文章中,我们将详细探讨各种机器学习算法的原理、优缺点和适用场景。

a871923942的博客 2965

JSP自定义标签(三) 多选控件(3)

JSP自定义标签(三)多选控件

Core_Star的专栏 2141

ROS从入门到精通6-2:gmapping激光建图与自定义建图功能包

本文用Turtlebot3实例直观介绍激光建图概念,并实现自定义建图功能包(自动建图与键盘手动控制建图)

FRIGIDWINTER的博客 2662

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JSP自定义标签(三) 多选控件

一、效果图 二、标签定义代码 package com.swcares.util.tags; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.

Core_Star的专栏 3212

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JSP自定义标签(三)自定义日期选择标签

这篇博客,我想利用前面两篇JSP标签的内容实现一个可以选择日期的自定义标签。这篇博客会用到WdatePicker.js插件,这是一个日期选择器。本篇博客主要是想利用前面两篇博客的内容实现一些能用上的自定义标签。关于WdatePicker.js的使用不会多说,重点还是自定义标签。 首先看一下最终的结果是个什么样子: 通过自定义标签生成一个输入框,单击这个输入框则会调用WdatePicker.j

zhonglin_li的博客 3157

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

JSP自定义tag控件标签

JSP支持自定tag的方法,那就是直接讲JSP代码保存成*.tag或者*.tagx的标签定义文件。tag和tagx文件不仅支持经典jsp代码,各种标签模版代码,还支持xml样式的jsp指令代码。 按照约定,tag和tagx文件需要放置在WEB-INF/tags目录下。 下面是一个简单的例子,使用自定义标签创建一个Button: 1 <%@ tag language="j...

weixin_30564785的博客 369

jsp的自定义标签 控制jsp内容显示

引入方式示例 <%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %> tld文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP ...

dengkuituo0680的博客 137

jsp的三种自定义标签 写法示例

jsp的三种自定义标签 写法示例 自定义标签可以大大方便我们的页面控件编写,并且可以实现很多统一的管理。 0、首先需要引入支持自定义标签的jar包,有两种方式, 一个是直接在maven里面引入依赖: <dependency> <groupId>javax.servlet.jsp</groupId> ...

s_x123456的博客 196

java自定义标签 实例_jsp的三种自定义标签 写法示例

自定义标签可以大大方便我们的页面控件编写,并且可以实现很多统一的管理。0、首先需要引入支持自定义标签的jar包,有两种方式,一个是直接在maven里面引入依赖:javax.servlet.jspjavax.servlet.jsp-api2.3.1另一个是直接用你Tomcat自带的jsp-api两种方式取其中一种即可。1、通过tld文件,自定义方法标签tld的这种用法,让我们可以在jsp里直接使用类...

weixin_39685392的博客 285

java jsp 自定义标签_JSP自定义标签开发入门

JSP自定义标签开发入门一般情况下开发jsp自定义标签需要引用以下两个包import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.*;首先我们需要大致了解开发自定义标签所涉及到的接口与类的层次结构(其中SimpleTag接口与SimpleTagSupport类是JSP2.0中新引入的)。目标1:自定义一个用表格显示用户信息的简单标签效果图...

weixin_36073959的博客 221

JSP GridView --使用自定义标签实现ASP.NET的控件

JSP用自定义标签实现ASP.net的gridview、datasource组件   第一部分:使用说明          使用过ASP.NET的人都知道,gridview控件功能很强大,使用很方便,提高了开发效率、而且表现逻辑和数据分离,只需提供一个DataTable对象(一个表格的数据对象)。甚至,只要引入datasource控件,可以不用代码也可以实现对数据库的查看、删除、修改等功能。

xyjikl 1193

(转)JSP自定义标签开发入门(2)

  JSP自定义标签开发入门(2) JSP自定义标签开发入门,简单标签的开发我们只要实现Tag接口即可,为了简单起见可以直接继承实现了此接口的TagSupport类。 AD:   TagSupport类已经为我们实现并扩展了一些方法(比如在上述方法中我们可以直接使用pageContext对象,调用父标签getParent()等),所以一般情况下我们只需重写do...

jc_dreaming2的博客 148
上一篇: JSP自定义标签(三) 多选控件
下一篇: Flex自定义右键菜单
carroll0911
博客等级 码龄17年 27粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值