`
jamesby
  • 浏览: 383486 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

两级联动Select的TAG实现

    博客分类:
  • Java
阅读更多
JSP实现太复杂而且不方便,那来个幽雅点的Tag包装!
package com.jamesby.cm.common.utils;

import java.util.List;

import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;

public class TwoLevelDropdownTag extends TagSupport {
	public final String _PAGE_SCOPE = "page";
	public final String _REQUERT_SCOPE = "request";
	public final String _SESSION_SCOPE = "session";
	public final String _APPLICATION_SCOPE = "application";
	
	public final String _JS_GET_METHOD_NAME = "_do_get_second";

	public final String _JS_ONE_ARRAY_NAME = "_js_one_array_name";

	public final String _JS_TWO_ARRAY_NAME = "_js_two_array_name";

	public final String _STYLE_WIDTH = "100";

	public final String _PARAM_FORM_NAME = "cmForm";

	public final String _TWO_DEFAULT_TEXT = "";

	private String paramFormName = _PARAM_FORM_NAME;

	private String paramOneIdField;

	private String paramOneNameField;

	private String paramLinkField;

	private String paramTwoIdField;

	private String paramTwoNameField;
	
	private java.util.List paramTwoArrayList;
	
	private String paramTwoDefaultText = _TWO_DEFAULT_TEXT;

	private String paramStyleWidth = _STYLE_WIDTH;

	private String paramJsOneArrayName = _JS_ONE_ARRAY_NAME;

	private String paramJsTwoArrayName = _JS_TWO_ARRAY_NAME;

	private String paramJsGetMethodName = _JS_GET_METHOD_NAME;


	private String paramPreJavascript = "";

	private String paramPostJavascript = "";
	
	private String scope = _REQUERT_SCOPE;
	
	private String itemsName="items";

	public String getItemsName() {
		return itemsName;
	}

	public void setItemsName(String itemsName) {
		this.itemsName = itemsName;
	}
	public TwoLevelDropdownTag() {
	}

	public int doEndTag() {
		try{		
			if (!_PAGE_SCOPE.equals(scope)&&!_REQUERT_SCOPE.equals(scope)&&!_SESSION_SCOPE.equals(scope)&&!_APPLICATION_SCOPE.equals(scope))
			{
				throw new RuntimeException("scope is invalid.....................");
			}
			
			if (_PAGE_SCOPE.equals(scope))
			{
				paramTwoArrayList = (List)this.pageContext.getAttribute(itemsName);
			}
			if (_REQUERT_SCOPE.equals(scope))
			{
				paramTwoArrayList = (List)this.pageContext.getRequest().getAttribute(itemsName);
			}
			if (_SESSION_SCOPE.equals(scope))
			{
				paramTwoArrayList = (List)this.pageContext.getSession().getAttribute(itemsName);
			}
			if (_APPLICATION_SCOPE.equals(scope))
			{
				paramTwoArrayList = (List)this.pageContext.getServletContext().getAttribute("itemsName");
			}
			
			if (null==paramTwoArrayList) throw new RuntimeException("items not exists............");
			
			java.io.Writer out = this.pageContext.getOut();
			out.write("<script language=\"javascript\">\n");
			out.write("<!--\n");	
			out.write(getParamPreJavascript());	
			out.write("var "+getParamJsTwoArrayName()+" = new Array("+getParamTwoArrayList().size()+");\n");
			java.util.HashMap _local = null;
			for (int i=0;i<getParamTwoArrayList().size();i++)
			{
			  	_local =  (java.util.HashMap)getParamTwoArrayList().get(i);
			   	out.write(getParamJsTwoArrayName()+"["+i+"] = new Array(3);\n");
			   	out.write(getParamJsTwoArrayName()+"["+i+"][0] = '"+_local.get(getParamTwoIdField())+"';\n");
			   	out.write(getParamJsTwoArrayName()+"["+i+"][1] = '"+_local.get(getParamTwoNameField())+"';\n");
			   	out.write(getParamJsTwoArrayName()+"["+i+"][2] = '"+_local.get(getParamLinkField())+"';\n");		  			
			}
			out.write("function "+getParamJsGetMethodName()+"(){\n");
			out.write("firstid = "+getParamFormName()+"."+getParamOneIdField()+".options["+getParamFormName()+"."+getParamOneIdField()+".selectedIndex].value;\n");
			out.write("a = "+getParamFormName()+"."+getParamTwoIdField()+".length;\n");
			out.write("for (i=0;i<a;i++){\n");
			out.write(getParamFormName()+"."+getParamTwoIdField()+".remove(0);\n");
			out.write("}\n");
			out.write("op = new Option();\n");
			out.write("op.text=\""+getParamTwoDefaultText()+"\";\n");
			out.write("op.value=\"\";\n");
			out.write(getParamFormName()+"."+getParamTwoIdField()+".add(op);\n");
			out.write("if (firstid==0){\n");
			out.write("return;\n");
			out.write("}\n");
			out.write("for (i=0;i<"+getParamJsTwoArrayName()+".length;i++){\n");
			out.write("if ("+getParamJsTwoArrayName()+"[i][2]==firstid)\n");
			out.write("{\n");
			out.write("op1 = new Option();\n");
			out.write("op1.value = "+getParamJsTwoArrayName()+"[i][0];\n");
			out.write("op1.text = "+getParamJsTwoArrayName()+"[i][1];\n");
			out.write(getParamFormName()+"."+getParamTwoIdField()+".options.add(op1);\n");
			out.write("}\n");
			out.write("}\n");
			out.write(getParamFormName()+"."+getParamTwoIdField()+".style.width="+getParamStyleWidth()+";\n");
			out.write("}\n");	
			out.write(getParamPostJavascript());	
			out.write("//-->\n");
			out.write("</script>\n");	
			out.flush();
		}catch(java.io.IOException ex)
		{
			ex.printStackTrace();
		}		
		return Tag.EVAL_PAGE;
	}

	public String get_JS_GET_METHOD_NAME() {
		return _JS_GET_METHOD_NAME;
	}
	public String get_JS_ONE_ARRAY_NAME() {
		return _JS_ONE_ARRAY_NAME;
	}
	public String get_JS_TWO_ARRAY_NAME() {
		return _JS_TWO_ARRAY_NAME;
	}


	public String get_PARAM_FORM_NAME() {
		return _PARAM_FORM_NAME;
	}

	public String get_STYLE_WIDTH() {
		return _STYLE_WIDTH;
	}

	public String get_TWO_DEFAULT_TEXT() {
		return _TWO_DEFAULT_TEXT;
	}

	public String getParamFormName() {
		return paramFormName;
	}

	public void setParamFormName(String paraFormName) {
		this.paramFormName = paraFormName;
	}

	public String getParamJsGetMethodName() {
		return paramJsGetMethodName;
	}

	public void setParamJsGetMethodName(String paramJsGetMethodName) {
		this.paramJsGetMethodName = paramJsGetMethodName;
	}

	public String getParamJsOneArrayName() {
		return paramJsOneArrayName;
	}

	public void setParamJsOneArrayName(String paramJsOneArrayName) {
		this.paramJsOneArrayName = paramJsOneArrayName;
	}

	public String getParamJsTwoArrayName() {
		return paramJsTwoArrayName;
	}

	public void setParamJsTwoArrayName(String paramJsTwoArrayName) {
		this.paramJsTwoArrayName = paramJsTwoArrayName;
	}

	public String getParamLinkField() {
		return paramLinkField;
	}

	public void setParamLinkField(String paramLinkField) {
		this.paramLinkField = paramLinkField;
	}

	public String getParamOneIdField() {
		return paramOneIdField;
	}

	public void setParamOneIdField(String paramOneIdField) {
		this.paramOneIdField = paramOneIdField;
	}

	public String getParamOneNameField() {
		return paramOneNameField;
	}

	public void setParamOneNameField(String paramOneNameField) {
		this.paramOneNameField = paramOneNameField;
	}

	public String getParamPostJavascript() {
		return paramPostJavascript;
	}

	public void setParamPostJavascript(String paramPostJavascript) {
		this.paramPostJavascript = paramPostJavascript;
	}

	public String getParamPreJavascript() {
		return paramPreJavascript;
	}

	public void setParamPreJavascript(String paramPreJavascript) {
		this.paramPreJavascript = paramPreJavascript;
	}

	public String getParamStyleWidth() {
		return paramStyleWidth;
	}

	public void setParamStyleWidth(String paramStyleWidth) {
		this.paramStyleWidth = paramStyleWidth;
	}


	public String getParamTwoDefaultText() {
		return paramTwoDefaultText;
	}

	public void setParamTwoDefaultText(String paramTwoDefaultText) {
		this.paramTwoDefaultText = paramTwoDefaultText;
	}

	public String getParamTwoIdField() {
		return paramTwoIdField;
	}

	public void setParamTwoIdField(String paramTwoIdField) {
		this.paramTwoIdField = paramTwoIdField;
	}

	public String getParamTwoNameField() {
		return paramTwoNameField;
	}

	public void setParamTwoNameField(String paramTwoNameField) {
		this.paramTwoNameField = paramTwoNameField;
	}

	public String getScope() {
		return scope;
	}

	public void setScope(String scope) {
		this.scope = scope;
	}

	public java.util.List getParamTwoArrayList() {
		return paramTwoArrayList;
	}
}



<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
  <tlibversion>1.0</tlibversion>
  <jspversion>1.1</jspversion>
  <shortname>display</shortname>
  <uri>http://jakarta.apache.org/taglibs/display</uri>
  <info>
         A description of the display tag library goes here...
  </info>
  <tag>
    <name>select2</name>
    <tagclass>com.jamesby.cm.common.utils.TwoLevelDropdownTag</tagclass>
    <bodycontent>EMPTY</bodycontent>
    <attribute>
      <name>paramOneIdField</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>paramOneNameField</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute> 
    <attribute>
      <name>paramLinkField</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>  
    <attribute>
      <name>paramTwoIdField</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>paramTwoNameField</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>               
    <attribute>
      <name>paramFormName</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>scope</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>itemsName</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>paramTwoDefaultText</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>  
    <attribute>
      <name>paramStyleWidth</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>paramJsOneArrayName</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute> 
    <attribute>
      <name>paramJsTwoArrayName</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>paramJsGetMethodName</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>paramPreJavascript</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>paramPostJavascript</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>                                
  </tag> 
</taglib>


<%@ page contentType="text/html;charset=GBK" language="java"%>
<%@ taglib uri="/tags/taglib_xb" prefix="xb"%>
<%
	java.util.List paramTwoArrayList = new java.util.ArrayList();
	java.util.Map a1 = new java.util.HashMap();
	a1.put("compid","1");
	a1.put("deptid","10");	
	a1.put("deptname","行政部");
	
	java.util.Map b1 = new java.util.HashMap();
	b1.put("compid","1");
	b1.put("deptid","20");	
	b1.put("deptname","财务部");	
	
	java.util.Map c1 = new java.util.HashMap();
	c1.put("compid","2");
	c1.put("deptid","30");	
	c1.put("deptname","市场部");				
	
	paramTwoArrayList.add(a1);
	paramTwoArrayList.add(b1);
	paramTwoArrayList.add(c1);
	pageContext.setAttribute("items",paramTwoArrayList);
%>
<xb:select2 paramOneIdField="compid" paramOneNameField="compname" paramLinkField="compid" paramTwoIdField="deptid" paramTwoNameField="deptname" scope="page"/>
<form name="cmForm">
	公司名称<select name="compid" onchange="_do_get_second();" style="width:100">
		<option value=""></option>
		<option value="1">公司一</option>
		<option value="2">公司二</option>
		<option value="3">公司三</option>
	</select>
	部门名称
	<select name="deptid" style="width:100">
	</select>
</form>
分享到:
评论

相关推荐

    Select2实现全国省市区三级联动下拉菜单

    本教程将详细讲解如何利用`Select2`实现全国省市区的三级联动下拉菜单。 首先,我们需要理解`Select2`的核心功能。`Select2`可以将普通的HTML选择框转化为功能强大的输入控件,支持搜索、多选、远程数据加载等多种...

    JSP+AJAX实现两级select联动 代码

    本篇将深入探讨如何利用JSP和AJAX实现两级select联动的效果,以及这种效果在实际应用中的价值。 首先,我们要理解什么是JSP。JSP是Java的一种服务器端脚本语言,它允许开发者在HTML页面中嵌入Java代码,从而动态...

    二级下拉列表联动 select 网页 html5

    二级下拉列表联动 select 网页 html5 学院、专业 选择的下拉列表 下载可用!!!

    DropDownList 二级联动Select示例代码

     ASP.NET中的二级联动Select示例代码,页面使用ashx,js实现联动,并可以获取DropDownList的值。  1.Cascading DropDownList  使用场景  省市联动  部门人员联动  项目模块联动(示例)  使用技术  ...

    select三级联动

    在网页开发中,"select三级联动"是一种常见的交互设计,主要应用于地址选择或者分类筛选等场景,例如在电商网站上填写收货地址时选择省份、城市、区县。这种联动效果使得用户能够逐级筛选,方便快捷地找到目标选项。...

    div模拟select框的实现省市联动三级和二级

    本篇文章将详细讲解如何使用`div`模拟`select`框,以及如何实现省市联动的二级和三级菜单。 首先,我们要理解`select`元素的基本用法。`select`是HTML中的一个表单元素,用于创建下拉选项列表。然而,由于`select`...

    iosSelect.js 五级联动(最多支持六级联动)

    "iosSelect.js"是一个专为实现多级联动选择效果而设计的库,尤其适用于创建具有省市区县乡村五级分类的下拉菜单。这样的功能在地理信息系统、电子商务网站或者需要用户输入详细地址的场景中非常常见。下面我们将详细...

    layui下拉框二级数据联动 fzzx.zip

    在这个场景中,我们讨论的是layui下的下拉框(select)的二级数据联动功能。 首先,`layui`的`select`组件是其UI库中的一个重要部分,它支持多选、搜索、远程加载等多种功能。在实际应用中,我们经常需要实现一个...

    Java代码实现两级联动

    在Java中实现两级联动,主要涉及到后端的数据处理和前端的界面交互。这里我们可以分为以下几个关键步骤来理解: 1. **后端数据准备**:首先,你需要有一套完整的数据结构来存储两级联动的数据。例如,可以使用Map, ...

    移动端mobileSelect省市区三级联动demo及省市区数据

    综上所述,"移动端mobileSelect省市区三级联动demo及省市区数据"是一个全面的解决方案,涵盖了前端开发中的多个重要方面,对于需要快速实现省市区选择功能的开发者来说非常有用。通过研究和理解这个demo,开发者可以...

    微信小程序省市两级联动

    在"省市两级联动"的实现中,我们主要涉及以下几个关键知识点: 1. 数据管理:微信小程序采用的是 MVVM 模型,即模型-视图-视图模型。我们需要在 `data` 中定义初始的省份和市的数据,并在用户操作时更新这些数据。 ...

    静态二级联动 select option

    静态二级联动 js 调取数据 带有 option 值

    js 省市区select 三级联动(全国城市三级联动下拉列表)

    在网页开发中,有时我们需要实现一个功能,让用户能够选择省份、城市和区县,这种功能被称为“三级联动”。本文将详细介绍如何使用JavaScript实现全国城市三级联动下拉列表,并结合提供的资源进行解析。 首先,理解...

    jquery省市区三级联动下拉菜单_select三级联动下拉菜单

    jquery省市区三级联动下拉菜单_select三级联动下拉菜单 jquery省市区三级联动下拉菜单_select三级联动下拉菜单 jquery省市区三级联动下拉菜单_select三级联动下拉菜单 jquery省市区三级联动下拉菜单_select三级联动...

    jquery select二级联动菜单

    本话题主要关注的是使用jQuery实现的二级联动下拉菜单,这是一种常见的交互设计,常用于网站的筛选或导航功能。下面将详细介绍这种二级联动菜单的实现原理、步骤以及相关的jQuery知识。 首先,联动菜单的基本概念是...

    select2插件实现省市区三级联动

    本文将深入探讨如何使用`Select2` 实现省市区三级联动。 `Select2` 插件是由 Select2.org 提供的一个开源项目,它旨在解决原生 HTML `&lt;select&gt;` 元素存在的问题,如样式受限、搜索功能缺失等。其特性包括但不限于...

    最简单js代码实现select二级联动下拉菜单

    本文实例为大家分享了js实现select二级联动下拉菜单,供大家参考,具体内容如下 &lt;&#37;@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt; &lt;&#37; String path = request.getContextPath()...

    js实现省市区三级联动非select下拉框版.docx

    JS 实现省市区三级联动非 Select 下拉框版 在 Web 开发中,Select 下拉框是非常常用的控件之一,但是它有其局限性,例如不能灵活地自定义样式和交互效果。因此,本文将介绍如何使用 JS 实现省市区三级联动非 Select...

Global site tag (gtag.js) - Google Analytics