?? tabletag.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 + -