⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tabletag.java

📁 用javascript写的树型复选框自定义标签
💻 JAVA
字号:
package com.ly.tag;

import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;

import org.apache.commons.collections.IteratorUtils;

public class TableTag implements Tag {
	
	/**
	 * 标签的页面上下文
	 */
	private PageContext pageContext;

	/**
	 * 上一级标签
	 *
	 */
	private Tag parent;

	/**
	 * 包含目标元素的集合
	 */
	private String collection = null;

	/**
	 * 指定collection及bean的查找范围,其值是形如request:page,
	 * 以":"分隔前者指明collection范围,后者指明bean范围
	 */
	private String scope = null;

	/**
	 * 选择框名称
	 */
	private String checkname = null;

	/**
	 * 根目录名称
	 */
	private String rootname = null;
	/**
	 * 已经选择的节点,属性名称
	 *
	 */
	private String selectedName = null;
	public String getSelectedName() {
		return selectedName;
	}
	public void setSelectedName(String selectedName) {
		this.selectedName = selectedName;
	}
	/**
	 * 是否需要链接
	 */
	private String isaction = null;
	public String getIsaction() {
		return isaction;
	}
	public void setIsaction(String isaction) {
		this.isaction = isaction;
	}
	/**
	 * 开始节点
	 */
	private String startnode = null;
	/**
	 * 是否只读
	 */
	private String readonly = null;
	private String tableclass = null;
	private String style = null;
	private String id = null;
	private String border = null;
	private String width = null;
	private String height = null;
	private String cellspacing = null;
	private String cellpadding = null;
	private String align = null;
	private String valign = null;
	private String background = null;
	private String bgcolor = null;	
	private String bordercolor = null;
	public String getBordercolor() {
		return bordercolor;
	}
	public void setBordercolor(String bordercolor) {
		this.bordercolor = bordercolor;
	}
	public TableTag(){
		super();
	}
	/**
	 * 调用doStartTag方法,这个方法可以返回EVAL_BODY_INCLUDE和SKIP_BODY,当返回EVAL_BODY_INCLUDE时
	 * ,就计算标签的body,如果返回SKIP_BODY,就不再计算标签的body.
	 */
	public int doStartTag() throws JspException {
		return SKIP_BODY;
	}
	/**
	 * 调用doEndTag方法,这个方法可以返回EVAL_PAGE或者SKIP_PAGE,当返回EVAL_PAGE时,容器将在标签结
     * 束时继续计算JSP页面其他的部分;如果返回SKIP_PAGE,容器将在标签结束时停止计算JSP页面其他的部分.
	 */
	public int doEndTag() throws JspTagException {
		try {
			ServletRequest request = pageContext.getRequest();
			String serverpath = ((HttpServletRequest)request).getContextPath();
			//设置已选择复选框,selectedName形式:(101,201,301)
			String selects = "";
			if(selectedName != null){
				selects = (String)request.getAttribute(selectedName);
				request.setAttribute(selectedName,null);
			}
			//获得集合
			Collection coll = (Collection)request.getAttribute(collection);			
			if (coll == null)
				return (EVAL_PAGE);

			JspWriter out = pageContext.getOut();
			StringBuffer outStringBuffer = new StringBuffer();
			int counts = 0;
			outStringBuffer.append("<script type=\"text/javascript\">\n\r");
			outStringBuffer.append("<!--\n\r");
			outStringBuffer.append("var Tree = new Array;\n\r");
			Iterator iterator = coll.iterator();
			while (iterator.hasNext()) {
				Object subObj = iterator.next();
				Iterator subVo = null;
				if (subObj.getClass().isArray())
					try {
						iterator = Arrays.asList((Object[]) subObj).iterator();
					} catch (ClassCastException e) {
						int length = Array.getLength(subObj);
						ArrayList c = new ArrayList(length);
						for (int i = 0; i < length; i++)
							c.add(Array.get(subObj, i));
						iterator = c.iterator();
					}
				else if (subObj instanceof Collection)
					subVo = ((Collection) subObj).iterator();
				else if (subObj instanceof Iterator)
					subVo = (Iterator) subObj;
				else if (subObj instanceof Map)
					subVo = ((Map) subObj).values().iterator();
				else {
					JspException e = new JspException(
							"fatal collection iterate.iterator");
					RequestUtils.saveException(pageContext, e);
					throw e;
				}
				String substr = "";
				while (subVo.hasNext()) {
					if ("".equals(substr)) {
						substr = (String) subVo.next();
					} else {
						substr = substr + "|" + subVo.next();
					}
				}
				outStringBuffer.append("Tree[");
				outStringBuffer.append(String.valueOf(counts));
				outStringBuffer.append("] = \"");
				outStringBuffer.append(substr);
				outStringBuffer.append("\";\n\r");
				counts++;
			}
			outStringBuffer.append("//--></script>\n\r");
			
			outStringBuffer.append("<div id=\"tree\" style=\"overflow-y: scroll;");
			String styleStr = "";
			if(height != null)
				styleStr = styleStr + "height:"+height+";";
			if(width != null)
				styleStr = styleStr + "width:"+width+";";
			if(border != null)
				styleStr = styleStr + "border-style:solid ;border-width:"+border+";";
			if(bordercolor != null){
				styleStr = styleStr + "border-color:"+bordercolor+";";
			}
			if(background != null)
				styleStr = styleStr + "background:"+background+";";
			if(bgcolor != null) 
				styleStr = styleStr + "background-color:"+bgcolor+";";
			styleStr = styleStr.substring(0,styleStr.length()-1);
			outStringBuffer.append(styleStr);
			outStringBuffer.append("\">\n\r");
			outStringBuffer.append("<script type=\"text/javascript\">\n\r");
			outStringBuffer.append("<!--\r\n");
			//createTree参数:Tree数组;开始节点,打开节点;已选择节点字符串(如:1,201);提交属性名;
			//根节点名称
			outStringBuffer.append("createTree(Tree,");
			//开始节点
			outStringBuffer.append("\""+startnode+"\",");
			outStringBuffer.append("\"0\",");
			//已选择节点字符串(如:1,201)
			outStringBuffer.append("\""+selects+"\",");
			outStringBuffer.append("\""+checkname+"\",");
			outStringBuffer.append("\""+rootname+"\",");
			outStringBuffer.append("\""+serverpath+"\",");
			outStringBuffer.append("\""+isaction+"\",");
			//添加TABLE样式
			String tableCss = "";
			if(tableclass != null) tableCss = tableCss+"tableclass:"+tableclass+",";
			if(style != null) tableCss = tableCss+"style:"+style+",";
			if(id != null) tableCss = tableCss+"id:"+id+",";
			
			if(width != null) tableCss = tableCss+"width:"+width+",";
			if(cellspacing != null) tableCss = tableCss+"cellspacing:"+cellspacing+",";
			if(cellpadding != null) tableCss = tableCss+"cellpadding:"+cellpadding+",";
			if(align != null) tableCss = tableCss+"align:"+align+",";
			if(valign != null) tableCss = tableCss+"valign:"+valign+",";
			tableCss = tableCss.substring(0,tableCss.length()-1);
			//System.out.println("tableCss:::"+tableCss);
			outStringBuffer.append("\""+tableCss+"\",");
			outStringBuffer.append("\""+readonly+"\"");
			outStringBuffer.append(");\n\r");
			outStringBuffer.append("//-->\r\n");
			outStringBuffer.append("</script>\n\r");
			outStringBuffer.append("</div>\n\r");
	        out.write(outStringBuffer.toString());
		} catch (IOException e) {
			throw new JspTagException("IO Error:" + e.getMessage());
		} catch (JspException e) {
			throw new JspTagException("Jsp Error:" + e.getMessage());
		}
		return EVAL_PAGE;
	}
	/**
	 * 调用release()方法释放标签程序占用的任何资源。
	 */
	public void release() {
		this.collection = null;
		this.pageContext = null;
		this.parent = null;
		this.scope = null;
		this.checkname = null;
	}
	/**
	 * 当容器创建一个新的标签实例后,通过setPageContext来设置标签的页面上下文.
	 */
	public void setPageContext(final PageContext pageContext) {
		this.pageContext = pageContext;
	}

	/**
	 * 使用setParent方法设置这个标签的上一级标签,如果没有上一级嵌套,设置为null.
	 */
	public void setParent(final Tag parent) {
		this.parent = parent;
	}

	public Tag getParent() {
		return this.parent;
	}

	public String getCollection() {
		return collection;
	}

	public void setCollection(String collection) {
		this.collection = collection;
	}

	public String getScope() {
		return scope;
	}

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

	public PageContext getPageContext() {
		return pageContext;
	}
	public String getCheckname() {
		return checkname;
	}

	public void setCheckname(String checkname) {
		this.checkname = checkname;
	}

	public String getRootname() {
		return rootname;
	}

	public void setRootname(String rootname) {
		this.rootname = rootname;
	}
	public String getAlign() {
		return align;
	}
	public void setAlign(String align) {
		this.align = align;
	}
	public String getBackground() {
		return background;
	}
	public void setBackground(String background) {
		this.background = background;
	}
	public String getBgcolor() {
		return bgcolor;
	}
	public void setBgcolor(String bgcolor) {
		this.bgcolor = bgcolor;
	}
	public String getBorder() {
		return border;
	}
	public void setBorder(String border) {
		this.border = border;
	}
	public String getCellpadding() {
		return cellpadding;
	}
	public void setCellpadding(String cellpadding) {
		this.cellpadding = cellpadding;
	}
	public String getCellspacing() {
		return cellspacing;
	}
	public void setCellspacing(String cellspacing) {
		this.cellspacing = cellspacing;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getStyle() {
		return style;
	}
	public void setStyle(String style) {
		this.style = style;
	}
	public String getTableclass() {
		return tableclass;
	}
	public void setTableclass(String tableclass) {
		this.tableclass = tableclass;
	}
	public String getValign() {
		return valign;
	}
	public void setValign(String valign) {
		this.valign = valign;
	}
	public String getWidth() {
		return width;
	}
	public void setWidth(String width) {
		this.width = width;
	}
	public String getStartnode() {
		return startnode;
	}
	public void setStartnode(String startnode) {
		this.startnode = startnode;
	}
	public String getHeight() {
		return height;
	}
	public void setHeight(String height) {
		this.height = height;
	}
	public String getReadonly() {
		return readonly;
	}
	public void setReadonly(String readonly) {
		this.readonly = readonly;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -