首页 > 其他 > 详细

自定义标签tld

时间:2014-04-30 07:56:50      阅读:673      评论:0      收藏:0      [点我收藏+]

1,首先要有tld文件标签文件:这里借鉴前辈,直接上代码。。

bubuko.com,布布扣
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
 <display-name>Expend Tag</display-name>
 <tlib-version>1.1</tlib-version>
 <short-name>exp</short-name>
 <uri>/exp-tags</uri>
 
<tag>
    <description><![CDATA[Render a select element]]></description>
    <name>select</name>
    
    <tag-class>pro.utils.exps.ExpSelectTag</tag-class> <!-- 注意这里是自己定义的标签类(处理你自己的标签内容)-->
    <body-content>JSP</body-content>
    <attribute>
      <description><![CDATA[The css class to use for element]]></description>
      <name>cssClass</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[style.]]></description>
      <name>style</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
      <name>disabled</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[ Key for first item in list. Must not be empty! ‘-1‘ and ‘‘ is correct, ‘‘ is bad.]]></description>
      <name>headerKey</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[Value expression for first item in list]]></description>
      <name>headerValue</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[HTML id attribute]]></description>
      <name>id</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[The name to set for element]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
      <name>onChange</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[Preset the value of input element.]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[code.]]></description>
      <name>code</name>
      <required>true</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[params.]]></description>
      <name>params</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[dataType.]]></description>
      <name>dataType</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[msg.]]></description>
      <name>msg</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>
 <!--  
<tag>
    <description><![CDATA[Renders a radio button input field]]></description>
    <name>radio</name>
    <tag-class>com.minxinloan.web.views.tags.ExpRadioTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
      <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
      <name>disabled</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[The name to set for element]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
      <name>onChange</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
      <name>onClick</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[Preset the value of input element.]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[colCount.]]></description>
      <name>colCount</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[code.]]></description>
      <name>code</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[params.]]></description>
      <name>params</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>  
   -->
 <!--  
<tag>
    <description><![CDATA[Render a list of checkboxes]]></description>
    <name>checkboxlist</name>
    <tag-class>com.minxinloan.web.views.tags.ExpCheckboxListTag</tag-class>
    <body-content>JSP</body-content>
        <attribute>
      <description><![CDATA[Set the html disabled attribute on rendered html element]]></description>
      <name>disabled</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[The name to set for element]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[Set the html onchange attribute on rendered html element]]></description>
      <name>onChange</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[Set the html onclick attribute on rendered html element]]></description>
      <name>onClick</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[Preset the value of input element.]]></description>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[colCount.]]></description>
      <name>colCount</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[code.]]></description>
      <name>code</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[params.]]></description>
      <name>params</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
   -->
 <tag>
    <description><![CDATA[Render a tree]]></description>
    <name>tree</name>
    <tag-class>pro.utils.exps.ExpTreeTag</tag-class> <!--这里也是自定义的标签-->
    <body-content>JSP</body-content>
     <attribute>
      <name>id</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>code</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>params</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>expendLevel</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>onClick</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>checkStyle</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>chkboxType</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>style</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>rootNodeId</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>rootNodeName</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
</tag> 

<tag>
    <description><![CDATA[Render a treeSelect]]></description>
    <name>treeSelect</name>
    <tag-class>pro.utils.exps.ExpTreeSelectTag</tag-class>   <!--同样也是自定的标签类 -->
    <body-content>JSP</body-content>
     <attribute>
      <name>id</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>code</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>params</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>expendLevel</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>onClick</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>checkStyle</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>chkboxType</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>value</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>style</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>rootNodeId</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>rootNodeName</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[dataType.]]></description>
      <name>dataType</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[msg.]]></description>
      <name>msg</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <description><![CDATA[name.]]></description>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
</tag>
<!-- 
<tag>
<description><![CDATA[Render a operate button or link]]></description>
    <name>operate</name>
    <tag-class>com.minxinloan.web.views.tags.ExpOperateTag</tag-class>
    <body-content>JSP</body-content>
     <attribute>
      <name>moduleId</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>type</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>preParams</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>afterParams</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>colId</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>operateTab</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
</tag>
 --><!-- 
<tag>
<description><![CDATA[Render a import button]]></description>
    <name>import</name>
    <tag-class>com.minxinloan.web.views.tags.ExpImportTag</tag-class>
    <body-content>JSP</body-content>
     <attribute>
      <name>returnUrl</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
    <attribute>
      <name>code</name>
      <required>true</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>dateFormat</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>checkRepeatIndex</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>dateIndex</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>rowNum</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>size</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>id</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
    <attribute>
      <name>label</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
</tag> -->
</taglib>
bubuko.com,布布扣

这个文件的后缀名是;expend-tag.tld这是我定义的。(可以任意修改)

2,把tld文件上面的对应的类(处理标签类建立起来。)

(1)首先上这个类: pro.utils.exps.ExpSelectTag
bubuko.com,布布扣
package pro.utils.exps;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import org.apache.commons.lang3.StringUtils;

import pro.entity.UIComponentBean;
import pro.utils.Helper;


public class ExpSelectTag extends BodyTagSupport {

    /**
     * 对应的一些属性
     */
    private static final long serialVersionUID = -2900233361611357594L;
    private String code;
    private String params;
    private String id;
    private String name;
    private String headerKey;
    private String headerValue;
    private String value;
    private String cssClass;
    private String style;
    private String onChange;
    private String disabled;
    private String dataType;
    private String msg;
    private JspWriter out;

    public void init() {
        out = pageContext.getOut();
    }

    @Override
    public int doStartTag() throws JspException {
        init();
        return super.EVAL_BODY_INCLUDE;
    }

  //处理方法, @Override
public int doEndTag() throws JspException { try { StringBuffer sb=new StringBuffer(); sb.append("<select"); if(StringUtils.isNotBlank(id)){ sb.append(" id=\""+id+"\""); } if(StringUtils.isNotBlank(name)){ sb.append(" name=\""+name+"\""); } if(StringUtils.isNotBlank(cssClass)){ sb.append(" class=\""+cssClass+"\""); } if(StringUtils.isNotBlank(style)){ sb.append(" style=\""+style+"\""); } if(StringUtils.isNotBlank(onChange)){ sb.append(" onChange=\""+onChange+"\""); } if(StringUtils.isNotBlank(disabled)&&"true".equals(disabled)){ sb.append(" disabled=\"true\""); } if(StringUtils.isNotBlank(dataType)){ sb.append(" dataType=\""+dataType+"\""); } if(StringUtils.isNotBlank(msg)){ sb.append(" msg=\""+msg+"\""); } sb.append(">"); if(StringUtils.isNotBlank(headerKey)||StringUtils.isNotBlank(headerValue)){ sb.append("<option value=\""+headerKey+"\" selected>").append(headerValue).append("</option>"); } if(StringUtils.isNotBlank(code)){ List<UIComponentBean> retList=null; if (StringUtils.isNotBlank(params)) { String[] paramsList =StringUtils.split(params, ",");
            //获取数据源(带有参数的查询) retList
= Helper.getCodeListToUIComponentBean(code.trim(), Arrays.asList(paramsList));// }else{
//获取数据源(不带参数的查询) retList
= Helper.getCodeListToUIComponentBean(code.trim()); } if(retList != null && retList.size() > 0){ for (int i = 0; i < retList.size(); i++) { UIComponentBean bean=retList.get(i); sb.append("<option value=\""+bean.getKey()+"\""); if(StringUtils.isNotBlank(value)&&value.equals(bean.getKey())){ sb.append(" selected"); } sb.append(" >").append(bean.getValue()).append("</option>"); } } } sb.append("</select>"); out.print(sb.toString()); } catch (IOException e) { e.printStackTrace(); } return super.EVAL_PAGE; } public void setCode(String code) { this.code = code; } public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public void setHeaderKey(String headerKey) { this.headerKey = headerKey; } public void setHeaderValue(String headerValue) { this.headerValue = headerValue; } public void setValue(String value) { this.value = value; } public void setCssClass(String cssClass) { this.cssClass = cssClass; } public void setStyle(String style) { this.style = style; } public void setOnChange(String onChange) { this.onChange = onChange; } public void setParams(String params) { this.params = params; } public void setDisabled(String disabled) { this.disabled = disabled; } public void setDataType(String dataType) { this.dataType = dataType; } public void setMsg(String msg) { this.msg = msg; } }
bubuko.com,布布扣

(2)这里直接上第二个tree标签的处理class类

bubuko.com,布布扣
package pro.utils.exps;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import org.apache.commons.lang3.StringUtils;

import pro.utils.Helper;
import pro.utils.basebean.JsonUtil;
import pro.utils.basebean.UITreeBean;

public class ExpTreeTag extends BodyTagSupport{

    /**
     * 
     */
    private static final long serialVersionUID = -9079160136312661975L;
    protected String code;
    protected String params;
    protected String id="zTree01";
    protected String expendLevel="3";
    protected String onClick;
    protected String checkStyle;
    protected String chkboxType="{ \"Y\": \"s\", \"N\": \"s\" }";
    protected String value;
    protected String style="width:200px;height:300px;";
    protected String rootNodeId;
    protected String rootNodeName;
    private JspWriter out;
    
    public void init() {
        out = pageContext.getOut();
    }
    
    @Override
    public int doStartTag() throws JspException {
        init();
        return super.EVAL_BODY_INCLUDE;
    }

    @Override
    public int doEndTag() throws JspException {
        try {
            StringBuffer sb=new StringBuffer();
            sb.append("<div id=\""+id+"\" class=\"ztree\"></div>");
            sb.append("<script type=\"text/javascript\">");
            sb.append("var setting = {treeId:\"tree_"+id+"\"");
            if(StringUtils.isNotBlank(onClick)){
                sb.append(",callback: {onClick: "+onClick+"}");
            }
            if(StringUtils.isNotBlank(checkStyle)){
                sb.append(",check: {enable: true,chkStyle: \""+checkStyle+"\",chkboxType: "+chkboxType+"}");
            }
            sb.append("};");
            if(StringUtils.isNotBlank(code)){
                List<UITreeBean> retList=null;
                if (StringUtils.isNotBlank(params)) {
                    String[] paramsList =StringUtils.split(params, ",");
                    retList = Helper.getCodeListToUITreeBean(code.trim(), Arrays.asList(paramsList),expendLevel,rootNodeId,rootNodeName);
                }else{
                    retList = Helper.getCodeListToUITreeBean(code.trim(),null,expendLevel,rootNodeId,rootNodeName);
                }
                sb.append("var zNodes =").append(JsonUtil.getJsonArrayString4JavaPOJO(retList,"")).append(";");
                sb.append("$.fn.zTree.init($(\"#"+id+"\"), setting, zNodes);");
                if(StringUtils.isNotBlank(value)){
                    String[] arr=StringUtils.split(value,‘,‘);
                    sb.append("var treeObj = $.fn.zTree.getZTreeObj(\""+id+"\");");
                    for (int i = 0; i < arr.length; i++) {
                        sb.append("var nodes = treeObj.getNodesByParam(\"id\",\""+arr[i]+"\",null);");
                        if(StringUtils.isBlank(checkStyle)){
                            sb.append("treeObj.selectNode(nodes[0]);");
                        }else{
                            sb.append("treeObj.checkNode(nodes[0],true,false);");
                        }
                    }
                }
                
            }
            sb.append("</script>");
            out.print(sb.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return super.EVAL_PAGE;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public void setParams(String params) {
        this.params = params;
    }

    public void setExpendLevel(String expendLevel) {
        this.expendLevel = expendLevel;
    }

    public void setOnClick(String onClick) {
        this.onClick = onClick;
    }

    public void setCheckStyle(String checkStyle) {
        this.checkStyle = checkStyle;
    }

    public void setChkboxType(String chkboxType) {
        this.chkboxType = chkboxType;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public void setStyle(String style) {
        this.style = style;
    }

    public void setRootNodeId(String rootNodeId) {
        this.rootNodeId = rootNodeId;
    }

    public void setRootNodeName(String rootNodeName) {
        this.rootNodeName = rootNodeName;
    }
    
}
bubuko.com,布布扣

(3)这里上第三个selectTree处理的类。

 

bubuko.com,布布扣
package pro.utils.exps;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;

import org.apache.commons.lang3.StringUtils;

import pro.utils.Helper;
import pro.utils.basebean.JsonUtil;
import pro.utils.basebean.UITreeBean;


public class ExpTreeSelectTag extends ExpTreeTag{

    /**
     * 
     */
    private static final long serialVersionUID = -9079160136312661975L;
    private String dataType;
    private String msg;
    private String name;
    
    private JspWriter out;
    
    public void init() {
        out = pageContext.getOut();
    }
    
    @Override
    public int doStartTag() throws JspException {
        init();
        return super.EVAL_BODY_INCLUDE;
    }

    @Override
    public int doEndTag() throws JspException {
        try {
            StringBuffer sb=new StringBuffer();
            sb.append("<div id=\"menuContent_"+name+"\" class=\"menuContent\" style=\"display:none; position: absolute;\">");
            sb.append("<ul id=\""+id+"\" class=\"ztree\" style=\"margin-top:0; width:160px;\"></ul>");
            sb.append("</div><input type=\"hidden\" value=\""+value+"\" name=\""+name+"\" id=\""+name+"Hidd\">");
            sb.append("<input type=\"text\" id=\""+name+"Val\" readonly=\"readonly\" ");
            if(StringUtils.isNotBlank(dataType)||StringUtils.isNotBlank(msg)){
                sb.append("dataType=\""+dataType+"\" msg=\""+msg+"\"");
            }
            sb.append("/><a id=\"menuBtn_"+name+"\" href=\"#\" onclick=\"showMenu_"+name+"();\">选择</a>");
            sb.append("<script type=\"text/javascript\">");
            sb.append("var setting = {treeId:\"tree_"+id+"\"");
            sb.append(",callback: {onClick: function(e, treeId, node){$(‘#"+name+"Hidd‘).val(node.id);$(‘#"+name+"Val‘).val(node.name);hideMenu_"+name+"();");
            if(StringUtils.isNotBlank(onClick)){
                sb.append(onClick+"(e, treeId, node);");
            }
            sb.append("}}");
            if(StringUtils.isNotBlank(checkStyle)){
                sb.append(",check: {enable: true,chkStyle: \""+checkStyle+"\",chkboxType: "+chkboxType+"}");
            }
            sb.append("};");
            if(StringUtils.isNotBlank(code)){
                List<UITreeBean> retList=null;
                if (StringUtils.isNotBlank(params)) {
                    String[] paramsList =StringUtils.split(params, ",");
                    retList = Helper.getCodeListToUITreeBean(code.trim(), Arrays.asList(paramsList),expendLevel,rootNodeId,rootNodeName);
                }else{
                    retList = Helper.getCodeListToUITreeBean(code.trim(),null,expendLevel,rootNodeId,rootNodeName);
                }
                sb.append("var zNodes =").append(JsonUtil.getJsonArrayString4JavaPOJO(retList,"")).append(";");
                sb.append("$.fn.zTree.init($(\"#"+id+"\"), setting, zNodes);");
                if(StringUtils.isNotBlank(value)){
                    String[] arr=StringUtils.split(value,‘,‘);
                    sb.append("var treeObj = $.fn.zTree.getZTreeObj(\""+id+"\");");
                    for (int i = 0; i < arr.length; i++) {
                        sb.append("var nodes = treeObj.getNodesByParam(\"id\",\""+arr[i]+"\",null);");
                        if(StringUtils.isBlank(checkStyle)){
                            sb.append("treeObj.selectNode(nodes[0]);");
                            sb.append("$(‘#"+name+"Hidd‘).val(nodes[0].id);$(‘#"+name+"Val‘).val(nodes[0].name);");
                        }else{
                            sb.append("treeObj.checkNode(nodes[0],true,false);");
                        }
                    }
                }
            }
            sb.append("function showMenu_"+name+"() {var obj = $(\"#"+name+"Val\");var offset = $(\"#"+name+"Val\").offset();");
            sb.append("$(\"#menuContent_"+name+"\").css({left:offset.left + \"px\", top:offset.top + obj.outerHeight() + \"px\"}).slideDown(\"fast\");");
            sb.append("$(\"body\").bind(\"mousedown\", onBodyDown_"+name+");}");
            sb.append("function hideMenu_"+name+"() {$(\"#menuContent_"+name+"\").fadeOut(\"fast\");$(\"body\").unbind(\"mousedown\", onBodyDown_"+name+");}");
            sb.append("function onBodyDown_"+name+"(event) {if (!(event.target.id == \"menuBtn_"+name+"\" || event.target.id == \"menuContent_"+name+"\" || $(event.target).parents(\"#menuContent_"+name+"\").length>0)) {hideMenu_"+name+"();}}");
            sb.append("</script>");
            out.print(sb.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return super.EVAL_PAGE;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public void setParams(String params) {
        this.params = params;
    }

    public void setExpendLevel(String expendLevel) {
        this.expendLevel = expendLevel;
    }

    public void setOnClick(String onClick) {
        this.onClick = onClick;
    }

    public void setCheckStyle(String checkStyle) {
        this.checkStyle = checkStyle;
    }

    public void setChkboxType(String chkboxType) {
        this.chkboxType = chkboxType;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getDataType() {
        return dataType;
    }

    public void setDataType(String dataType) {
        this.dataType = dataType;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public void setName(String name) {
        this.name = name;
    }
    
}
bubuko.com,布布扣

3,select标签对应的有一个实体类,tree对应的一个实体类

(1)select实体类

bubuko.com,布布扣
package pro.entity;

public class UIComponentBean {
    private String key;
    private String value;

    public UIComponentBean()
    {
    }
    public UIComponentBean(String key,String value)
    {
        this.key = key;
        this.value = value;
    }
    
    
    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
bubuko.com,布布扣

(2)tree实体类

bubuko.com,布布扣
package pro.utils.basebean;

import java.util.List;

public class UITreeBean {
    private String id;
    private String pId;
    private String name;
    private boolean isParent=false;
    private boolean open=false;
    private List<UITreeBean> children;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getpId() {
        return pId;
    }

    public void setpId(String pId) {
        this.pId = pId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isParent() {
        return isParent;
    }

    public void setParent(boolean isParent) {
        this.isParent = isParent;
    }

    public boolean isOpen() {
        return open;
    }

    public void setOpen(boolean open) {
        this.open = open;
    }

    public List<UITreeBean> getChildren() {
        return children;
    }

    public void setChildren(List<UITreeBean> children) {
        this.children = children;
    }

}
bubuko.com,布布扣

4,然后就直接上DBHeper类了,提供数据源的以及,tree标签定义的递归(我这里都是手动封装数据源,没有真正连接数据库)

bubuko.com,布布扣
package pro.utils;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;


import pro.entity.UIComponentBean;
import pro.utils.basebean.UITreeBean;


public class Helper {
     /**
         * @Description 获得字典表或缓存中的列表,封装成UIComponentBean,用于扩展标签
         * @param codeName
         * @param params
         * @return List<UIComponentBean>
         */
        public static List<UIComponentBean> getCodeListToUIComponentBean(String codeName,List params){
//            List<UIComponentBean> list = (List<UIComponentBean>)getCodeList(codeName,params);
//            List<UIComponentBean> retList = new ArrayList<UIComponentBean>();
//            for(java.util.Iterator it= list.iterator();it.hasNext();){
//                List tmp = (List)it.next();
//                UIComponentBean bean = new UIComponentBean();
//                if(tmp.size()>0){
//                    bean.setKey((String)tmp.get(0));
//                    if(tmp.size()>1){
//                        bean.setValue((String)tmp.get(1));
//                    }
//                }
//                retList.add(bean);
//            }

                List<UIComponentBean> retList = new ArrayList<UIComponentBean>();
                retList.add(new UIComponentBean("1","朝阳区"));
                retList.add(new UIComponentBean("2","丰台区"));
                retList.add(new UIComponentBean("3","海淀区"));
                retList.add(new UIComponentBean("4","西城区"));
                retList.add(new UIComponentBean("5","东城区"));
                retList.add(new UIComponentBean("6","昌平区"));
            return retList;
        }
        
        public static List<UIComponentBean> getCodeListToUIComponentBean(String codeName){
            return getCodeListToUIComponentBean(codeName,null);
        }
//        /**
//         * 
//         * @param codeName
//         * @param params
//         * @param expendLevel
//         * @return
//         */

        @SuppressWarnings("rawtypes")
        public static List<UITreeBean> getCodeListToUITreeBean(String codeName,List params,String expendLevel,String rootNodeId,String rootNodeName){
            List list = getCodeList(codeName,params);
            List<UITreeBean> retList = new ArrayList<UITreeBean>();
            UITreeBean bean = new UITreeBean();
            if(StringUtils.isNotBlank(rootNodeId)&&StringUtils.isNotBlank(rootNodeName)){
                bean.setId(rootNodeId);
                bean.setpId(rootNodeId);
                bean.setName(rootNodeName);
            }else{
                if(null!=list&&list.size()>0){
                    List tmp = (List)list.get(0);
                    if(tmp.size()>0){
                        bean.setId((String)tmp.get(0));
                        if(tmp.size()>1){
                            bean.setpId((String)tmp.get(1));
                        }
                        if(tmp.size()>2){
                            bean.setName((String)tmp.get(2));
                        }
                    }
                }
            }
            int treeLevel=1;
            setChildren(bean, list,expendLevel,treeLevel);
            retList.add(bean);
            return retList;
        }
//        /**
//         * 递归
//         * @param bean
//         * @param list
//         * @param expendLevel
//         * @param treeLevel
//         */
        private static void setChildren(UITreeBean bean,List list,String expendLevel,int treeLevel){
            List<UITreeBean> children=new ArrayList<UITreeBean>();
            for (int i = 0; i < list.size(); i++) {
                List tmp = (List)list.get(i);
                if(bean.getId().equals((String)tmp.get(1))){
                    if(treeLevel<=Integer.parseInt(expendLevel)){
                        bean.setOpen(true);
                    }
                    bean.setParent(true);
                    treeLevel++;
                    UITreeBean tmpBean=new UITreeBean();
                    tmpBean.setId((String)tmp.get(0));
                    tmpBean.setpId((String)tmp.get(1));
                    tmpBean.setName((String)tmp.get(2));
                    setChildren(tmpBean,list,expendLevel,treeLevel);
                    children.add(tmpBean);
                }
            }
            bean.setChildren(children);
        }
        /**
         * @Description 获得字典表或缓存中的列表
         * @param codeName
         * @param params
         * @return List
         */

        @SuppressWarnings("rawtypes")
        public static List getCodeList(String codeName,List params){
            List list = new ArrayList();
            //这里才是真实数据源,直接查询数据库(你们就直接查询数据库)
//                DictionaryService dictionaryService = (DictionaryService)SpringContextHolder.getBean("dictionaryService");
//                list = dictionaryService.getDataListByCacheCode(codeName,params);

                //我这里用字符串模拟封装集合模拟数据源
                if("selectTree".equals(codeName))
                {
                    String str = "[120, 150, 华北地区], [122, 150, 华南地区], [123, 150, 华中地区], [124, 150, 东北地区], [125, 150, 中西地区], [126, 150, 西南地区], [150, 0, 中融民信], [151, 150, 华东地区], [153, 120, 北京市], [154, 120, 唐山市], [155, 126, 贵阳市], [156, 126, 南宁市], [157, 126, 长沙市], [158, 126, 株洲市], [159, 126, 遵义市], [160, 151, 上海市], [161, 151, 南京市], [162, 122, 福州市], [163, 122, 厦门市], [164, 123, 郑州市], [165, 123, 青岛市], [166, 123, 济南市], [167, 123, 合肥市], [168, 124, 沈阳市], [169, 124, 长春市], [170, 120, 天津市], [171, 125, 洛阳市], [172, 125, 兰州市], [173, 125, 西安市], [174, 125, 重庆市], [175, 125, 成都市], [176, 151, 杭州市], [177, 120, 石家庄市]";
                    list  = getList(str);
                }
                if("Tree".equals(codeName))
                {
                    String str = "[111, 0, 华北地区财富中心], [120, 111, 北京市财富中心], [121, 120, 北京第一财富中心], [122, 121, 销售团队A], [123, 122, 团队1], [10053, 123, dd], [124, 122, 团队2], [157, 122, 团队3], [10052, 157, f], [158, 122, 团队4], [10037, 121, 销售团队B], [400, 10037, 团队13], [401, 10037, 团队14], [10040, 121, 销售团队C], [159, 10040, 团队5], [393, 10040, 团队6], [394, 10040, 团队7], [10041, 121, 销售团队D], [395, 10041, 团队8], [396, 10041, 团队9], [397, 10041, 团队10], [398, 10041, 团队11], [399, 10041, 团队12], [144, 120, 北京第七财富中心], [145, 144, 销售团队A], [146, 145, 团队1], [148, 145, 团队2], [149, 145, 团队3], [153, 145, 团队4], [154, 145, 团队5]";
                    String sq1 = ", [147, 144, 销售团队B], [150, 147, 团队1], [151, 147, 团队2], [152, 147, 团队3], [155, 147, 团队4], [156, 147, 团队5], [403, 120, 北京第二财富中心], [409, 403, 销售团队A], [414, 409, 团队1], [419, 409, 团队6], [10033, 409, 团队10], [10028, 403, 销售团队B], [415, 10028, 团队2], [417, 10028, 团队5], [10030, 10028, 团队7], [10031, 10028, 团队8], [10032, 10028, 团队9], [10029, 403, 销售团队C], [416, 10029, 团队3], [418, 10029, 团队4], [404, 120, 北京第三财富中心], [410, 404, 销售一部], [420, 410, 销售团队A], [422, 410, 销售团队B], [423, 410, 销售团队C], [421, 404, 销售二部], [424, 421, 销售团队A], [425, 421, 销售团队B], [426, 421, 销售团队C], [427, 421, 销售团队D], [428, 404, 销售三部], [429, 428, 销售团队A], [430, 428, 销售团队B], [431, 428, 销售团队C], [405, 120, 北京第四财富中心], [411, 405, 销售团队A], [436, 411, 团队5], [438, 411, 团队6], [10035, 405, 销售团队B], [437, 10035, 团队7], [439, 10035, 团队8], [440, 10035, 团队9], [441, 10035, 团队10], [10013, 10035, 团队11], [10036, 405, 销售团队C], [432, 10036, 团队1], [433, 10036, 团队2], [434, 10036, 团队3], [435, 10036, 团队4], [406, 120, 北京第五财富中心], [412, 406, 销售团队A], [443, 412, 团队1], [444, 412, 团队2], [445, 412, 团队3], [442, 406, 销售团队B], [446, 442, 团队1], [447, 442, 团队2], [10004, 442, 团队3], [10005, 406, 销售团队C], [10006, 10005, 团队1], [10007, 10005, 团队2], [407, 120, 北京第六财富中心], [413, 407, 销售团队A], [450, 413, 团队3], [451, 413, 团队4], [10014, 413, 团队5], [10038, 407, 销售团队B], [10015, 10038, 团队6], [10016, 10038, 团队7], [10017, 10038, 团队8], [10018, 10038, 团队9], [10019, 10038, 团队10], [10039, 407, 销售团队C], [448, 10039, 团队1], [449, 10039, 团队2], [129, 111, 天津市财富中心], [130, 129, 天津财富中心], [131, 130, 销售团队A], [132, 131, 团队1], [133, 131, 团队2], [453, 131, 团队3], [454, 131, 团队4], [455, 131, 团队7], [456, 131, 团队5], [457, 131, 团队6], [10009, 131, 团队8], [10010, 131, 团队9], [488, 111, 石家庄市财富中心], [489, 488, 石家庄财富中心], [490, 489, 销售团队A], [491, 490, 团队1], [492, 490, 团队2], [493, 490, 团队3], [494, 490, 团队4], [495, 490, 团队5], [496, 490, 团队6], [10020, 490, 团队7], [10021, 490, 团队8], [10022, 490, 团队9], [206, 0, 华东地区财富中心], [207, 206, 杭州市财富中心], [208, 207, 杭州第一财富中心], [209, 208, 销售团队A], [210, 209, 团队1], [211, 209, 团队2], [521, 209, 团队3], [10011, 209, 团队4], [10012, 209, 团队5], [10000, 207, 杭州第二财富中心], [10001, 10000, 销售团队A], [10002, 10001, 团队1], [10003, 10001, 团队2], [212, 206, 上海市财富中心], [213, 212, 上海第一财富中心], [214, 213, 销售团队A], [215, 214, 团队1], [497, 213, 销售团队B], [498, 497, 团队1], [499, 497, 团队2], [500, 497, 团队3], [501, 497, 团队4], [502, 213, 销售团队C], [503, 502, 团队1], [504, 502, 团队2], [505, 502, 团队3], [217, 212, 上海第二财富中心], [218, 217, 销售团队A], [220, 218, 团队A-1], [506, 218, 团队A-2], [507, 218, 团队A-3], [219, 217, 销售团队B], [508, 219, 团队B-1], [509, 219, 团队B-2], [221, 212, 上海第三财富中心], [222, 221, 销售团队A], [223, 222, 团队1], [224, 222, 团队2], [510, 222, 团队3], [511, 221, 销售团队B], [512, 511, 团队1], [513, 511, 团队2], [514, 221, 销售团队C], [515, 514, 团队1], [516, 514, 团队2], [517, 514, 团队3], [225, 212, 上海第四财富中心], [226, 225, 销售团队A], [227, 226, 团队1], [228, 226, 团队2], [518, 225, 销售团队B], [520, 518, 团队1], [529, 212, 上海第五财富中心], [530, 529, 销售团队A], [531, 530, 团队1], [532, 530, 团队2], [533, 530, 团队3], [534, 530, 团队4], [458, 0, 华南地区财富中心], [459, 458, 厦门市财富中心], [522, 459, 厦门财富中心], [460, 522, 销售团队A], [461, 460, 团队1], [462, 460, 团队2], [463, 0, 华中地区财富中心], [464, 463, 青岛市财富中心], [465, 464, 青岛财富中心], [466, 465, 销售团队A], [467, 466, 团队1], [468, 466, 团队2], [469, 466, 团队3], [470, 466, 团队4], [471, 0, 东北地区财富中心], [472, 471, 沈阳市财富中心], [473, 472, 沈阳财富中心], [474, 473, 销售团队A], [475, 474, 团队1], [476, 474, 团队2], [477, 474, 团队3], [478, 474, 团队4], [479, 474, 团队5], [480, 474, 团队6], [481, 0, 中西地区财富中心], [482, 481, 西安市财富中心], [483, 482, 西安财富中心], [484, 483, 销售团队A], [485, 484, 团队1], [486, 484, 团队2], [487, 484, 团队3], [10023, 0, 信审中心], [10050, 0, 结算中心], [10025, 0, 销售支持], [10047, 0, 团队7], [10051, 0, 销售中心], [110, 10051, 华北地区营业部], [115, 110, 北京市营业部], [116, 115, 北京朝阳营业部], [117, 116, 销售团队A], [118, 117, 团队1], [119, 117, 团队2], [138, 117, 团队3], [139, 117, 团队4], [142, 117, 团队5], [143, 117, 团队6], [134, 115, 北京中关村营业部], [135, 134, 销售团队A], [136, 135, 团队1], [137, 135, 团队2], [298, 135, 团队3], [299, 135, 团队4], [300, 135, 团队5], [301, 135, 团队6], [140, 110, 天津市营业部], [141, 140, 天津河西营业部], [126, 141, 销售团队A], [127, 126, 团队1], [128, 126, 团队2], [308, 126, 团队3], [309, 126, 团队4], [160, 110, 唐山市营业部], [161, 160, 唐山路南营业部], [162, 161, 销售团队A], [163, 162, 团队1], [164, 162, 团队2], [302, 162, 团队3], [303, 162, 团队4], [304, 162, 团队5], [305, 162, 团队6], [306, 162, 团队7], [307, 162, 团队8], [165, 10051, 西南地区营业部], [166, 165, 贵阳市营业部], [167, 166, 贵阳云岩营业部], [168, 167, 销售团队A], [169, 168, 团队1], [170, 168, 团队2], [364, 168, 团队3], [365, 168, 团队4], [366, 168, 团队5], [367, 168, 团队6], [368, 168, 团队7], [369, 168, 团队8], [171, 165, 南宁市营业部], [172, 171, 南宁青秀营业部], [173, 172, 销售团队A], [174, 173, 团队1], [175, 173, 团队2], [370, 173, 团队3], [371, 173, 团队4], [372, 173, 团队5], [373, 173, 团队6], [176, 165, 长沙市营业部], [177, 176, 长沙芙蓉营业部], [178, 177, 销售团队A], [179, 178, 团队1], [180, 178, 团队2], [374, 178, 团队3], [375, 178, 团队4], [376, 178, 团队5], [377, 178, 团队6], [10024, 178, 团队7], [181, 165, 株洲市营业部], [182, 181, 芦淞营业部], [183, 182, 销售团队A], [184, 183, 团队1], [185, 183, 团队2], [378, 183, 团队3], [379, 183, 团队4], [380, 183, 团队5], [186, 165, 遵义市营业部], [187, 186, 遵义红花岗营业部], [188, 187, 销售团队A], [189, 188, 团队1], [190, 188, 团队2], [381, 188, 团队3], [382, 188, 团队4], [383, 188, 团队5], [384, 188, 团队6], [385, 188, 团队7], [386, 188, 团队8], [191, 10051, 华东地区营业部], [192, 191, 上海市营业部], [193, 192, 上海静安营业部], [194, 193, 销售团队A], [195, 194, 团队1], [196, 194, 团队2], [387, 194, 团队3], [388, 194, 团队4], [389, 194, 团队5], [390, 194, 团队6], [197, 192, 上海徐家汇营业部], [198, 197, 徐家汇营业部第一分部], [199, 198, 团队1], [200, 198, 团队2], [523, 197, 徐家汇营业部第二分部], [525, 523, 团队1], [10008, 523, 团队2], [10026, 523, 团队3], [10027, 523, 团队4], [201, 191, 南京市营业部], [202, 201, 南京白下营业部], [203, 202, 销售团队A], [204, 203, 团队1], [205, 203, 团队2], [391, 203, 团队3], [392, 203, 团队4], [229, 10051, 中西地区营业部], [230, 229, 洛阳市营业部], [231, 230, 洛阳涧西营业部], [232, 231, 销售团队A], [233, 232, 团队1], [234, 232, 团队2], [350, 232, 团队3], [351, 232, 团队4], [352, 232, 团队5], [235, 229, 兰州市营业部], [236, 235, 兰州城关营业部], [237, 236, 销售团队A], [238, 237, 团队1], [239, 237, 团队2], [353, 237, 团队3], [354, 237, 团队4], [240, 229, 西安市营业部], [241, 240, 西安碑林营业部], [242, 241, 销售团队A], [243, 242, 团队1], [244, 242, 团队2], [355, 242, 团队3], [356, 242, 团队4], [357, 242, 团队5], [245, 229, 重庆市营业部], [246, 245, 重庆江北营业部], [247, 246, 销售团队A], [248, 247, 团队1], [249, 247, 团队2], [358, 247, 团队3], [359, 247, 团队4], [360, 247, 团队5], [361, 247, 团队6], [10034, 247, 团队7], [250, 229, 成都市营业部], [251, 250, 成都青羊营业部], [252, 251, 销售团队A], [253, 252, 团队1], [254, 252, 团队2], [362, 252, 团队3], [363, 252, 团队4], [255, 10051, 东北地区营业部], [256, 255, 沈阳市营业部], [257, 256, 沈阳和平营业部], [258, 257, 销售团队A], [259, 258, 团队1], [260, 258, 团队2], [341, 258, 团队3], [342, 258, 团队4], [343, 258, 团队5], [344, 258, 团队6], [261, 255, 长春市营业部], [262, 261, 长春朝阳营业部], [263, 262, 销售团队A], [264, 263, 团队1], [265, 263, 团队2], [345, 263, 团队3], [346, 263, 团队4], [347, 263, 团队5], [348, 263, 团队6], [349, 263, 团队7], [266, 10051, 华中地区营业部], [267, 266, 郑州市营业部], [268, 267, 郑州金水营业部], [269, 268, 销售团队A], [270, 269, 团队1], [271, 269, 团队2], [318, 269, 团队3], [319, 269, 团队4], [320, 269, 团队5], [272, 266, 青岛市营业部], [273, 272, 青岛市南营业部], [274, 273, 销售团队A], [275, 274, 团队1], [276, 274, 团队2], [321, 274, 团队3], [322, 274, 团队4], [323, 274, 团队5], [324, 274, 团队6], [325, 274, 团队7], [326, 274, 团队8], [327, 274, 团队9], [328, 274, 团队10], [329, 274, 团队11], [408, 274, 团队12], [277, 266, 济南市营业部], [278, 277, 济南市中营业部], [279, 278, 销售团队A], [280, 279, 团队1], [281, 279, 团队2], [331, 279, 团队3], [332, 279, 团队4], [333, 279, 团队5], [334, 279, 团队6], [282, 266, 合肥市营业部], [283, 282, 合肥庐阳营业部], [284, 283, 销售团队A], [285, 284, 团队1], [286, 284, 团队2], [335, 284, 团队3], [336, 284, 团队4], [337, 284, 团队5], [338, 284, 团队6], [339, 284, 团队7], [340, 284, 团队8], [287, 10051, 华南地区营业部], [288, 287, 福州市营业部], [289, 288, 福州鼓楼营业部], [290, 289, 销售团队A], [291, 290, 团队1], [292, 290, 团队2], [310, 290, 团队3], [311, 290, 团队4], [312, 290, 团队5], [313, 290, 团队6], [293, 287, 厦门市营业部], [294, 293, 厦门思明营业部], [295, 294, 销售团队A], [296, 295, 团队1], [297, 295, 团队2], [314, 295, 团队3], [315, 295, 团队4], [316, 295, 团队5], [317, 295, 团队6]";
                    
                    list  = getList(str);
                }
                
                
             return list;
        }
        

        @SuppressWarnings("rawtypes")
        public static List  getList(String str)
        {
            
            String ss_1[] = str.split("],");

            List list2 = new ArrayList();
            for(int i=0;i<ss_1.length;i++)
            {
                String ss_2 = ss_1[i].trim().substring(1);
                String ss_3 [] = ss_2.split(",");
                List list3 = new ArrayList();
                for(int j = 0;j<ss_3.length;j++)
                {
                    list3.add(ss_3[j].trim());
                    list2.add(list3);
                }
                
            }
            return list2;
        }
//        public static String getSqlByCode(String cacheKey){
//            DictionaryService dictionaryService = (DictionaryService)SpringContextHolder.getBean("dictionaryService");
//            return dictionaryService.getSqlByCode(cacheKey);
//        } 
//        /**
//         * @Description 清除session中有关页面提示信息
//         */
//        public static void clearExecuteMsg(){
//            HttpServletRequest req =((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
//            HttpSession session = req.getSession();
//            if (session!=null){
//                session.removeAttribute(SystemProperties.GLOBAL_ERROR_INFO_KEY);
//                session.removeAttribute(SystemProperties.GLOBAL_SUCCESS_INFO_KEY);
//                session.removeAttribute(SystemProperties.GLOBAL_DETAIL_ERROR_INFO_KEY);    
//            }
//        }
//        
//        /**
//         * 
//         * @param bean
//         * @param moduleId
//         * @return
//         */
//        public static List<OperateVO> getUserOperate(LoginUserInfoBean bean,String moduleId){
//            OperateService operateService = (OperateService)SpringContextHolder.getBean("operateService");
//            return operateService.queryUserOperate(bean,moduleId);
//        }
}
bubuko.com,布布扣

 

5,我这里有个json工具类,用到了一点,也贴出来了。

bubuko.com,布布扣
package pro.utils.basebean;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;



/** 
 * 
* <p>Title: Json工具类</p>
* <p>Description: </p>
* <p>Company: minxin</p> 
* @author    xiabz
* @date       Oct 28, 2013
 */
public class JsonUtil{

    /**
     * 
     * 将java对象转换成json字符串
     * 
     * @param javaObj
     * 
     * @return
     */

    public static String getJsonString4JavaPOJO(Object javaObj) {

        JSONObject json;

        json = JSONObject.fromObject(javaObj);

        return json.toString();

    }

    /**
     * 
     * 将java对象转换成json字符串,并设定日期格式
     * 
     * @param javaObj
     * 
     * @param dataFormat
     * 
     * @return
     */

    public static String getJsonString4JavaPOJO(Object javaObj,
            String dataFormat) {

        JSONObject json;

        JsonConfig jsonConfig = configJson(dataFormat);

        json = JSONObject.fromObject(javaObj, jsonConfig);

        return json.toString();

    }

    
    /**
     * 
     * 将java对象转换成json字符串,并设定日期格式
     * 
     * @param javaObj
     * 
     * @param dataFormat
     * 
     * @return
     */

    public static String getJsonArrayString4JavaPOJO(Object javaObj,
            String dataFormat) {

        JSONArray json;

        JsonConfig jsonConfig = configJson("yyyy-MM-dd HH:mm:ss");

        json = JSONArray.fromObject(javaObj, jsonConfig);

        return json.toString();

    }
    
    public static JSONObject objectcollect2json(List list, int total) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("total", total);
        map.put("rows", list);
        return JSONObject.fromObject(map);
    }

    
    /**
     * 
     * JSON 时间解析器具
     * 
     * @param datePattern
     * 
     * @return
     */

    public static JsonConfig configJson(String datePattern) {

        JsonConfig jsonConfig = new JsonConfig();

        jsonConfig.setExcludes(new String[] { "" });

        jsonConfig.setIgnoreDefaultExcludes(false);

        jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

        jsonConfig.registerJsonValueProcessor(Date.class,
                new DateJsonValueProcessor(datePattern));

        return jsonConfig;

    }

    /**
     * 
     * 
     * 
     * @param excludes
     * 
     * @param datePattern
     * 
     * @return
     */

    public static JsonConfig configJson(String[] excludes,

    String datePattern) {

        JsonConfig jsonConfig = new JsonConfig();

        jsonConfig.setExcludes(excludes);

        jsonConfig.setIgnoreDefaultExcludes(false);

        jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

        jsonConfig.registerJsonValueProcessor(Date.class,

        new DateJsonValueProcessor(datePattern));

        return jsonConfig;

    }
    /**
     * 
     * <p>
     * Title:
     * </p>
     * <p>
     * Description: 从一个JSON 对象字符格式中得到一个java对象
     * </p>
     * 
     * @author Robin
     * @param jsonString
     * @param pojoCalss
     * @return
     */
    public static Object getObject4JsonString(String jsonString, Class pojoCalss) {
        Object pojo = null;
        try {
            JSONObject jsonObject = JSONObject.fromObject(jsonString);
            pojo = JSONObject.toBean(jsonObject, pojoCalss);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return pojo;
    }

}
bubuko.com,布布扣

6,在页面上引用标签

bubuko.com,布布扣
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="s" uri="/struts-tags" %> 
<%@ taglib prefix="exp" uri="/exp-tags" %> (这里是就是你对应的tld文件的一个<uri>/exp-tags</uri>)
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP ‘index.jsp‘ starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    <link type="text/css" rel="stylesheet" href="jquery-ztree/3.5.12/css/zTreeStyle/zTreeStyle.css" />
    
    <script type="text/javascript" src="jquery/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="jquery-ztree/3.5.12/js/jquery.ztree.core-3.5.js"></script>
  </head>
  <script type="text/javascript">
      function importExcelJs()
      {
          
          document.getElementById("importExcelSubmit").action="<%=basePath%>serviceAction.action";
          alert(document.getElementById("importExcelSubmit").action);
          document.getElementById("importExcelSubmit").submit();
      }
      
      function btnSelect()
      {
          var selectName = document.getElementById("q_financeProductsCd").value;
          document.getElementById("importExcelSubmit").action=<%=basePath%>selectAction.action?selectName=+selectName;

        alert(document.getElementById("importExcelSubmit").action);
        document.getElementById("importExcelSubmit").submit();
      }
      function btnOnclik()
      {
          alert("a");
          var chkObjs = document.getElementsByName("radName");
          var chkValue = "";
          for(var i=0;i<chkObjs.length;i++){
            if(chkObjs[i].checked){
                chkValue = chkObjs[i].value;
                break;
            }
        }
          alert(chkValue);
          
      }
      
      function clickArea(e, id, node) {
        $(#q_dept).val(-1);
        $(#q_deptName).val(‘‘);
        $(#q_areaId).val(node.id);
        document.getElementById(queryMainForm).action=<%=basePath%>treeAction.action;
        $(#queryMainForm).submit();
    }
      
      function treeClick(e, id, node) {
    

        $(#q_areaId).val(node.id);
        $(#q_dept).val(node.id);
        $(#q_deptName).val(node.name);
        document.getElementById(queryMainForm).action=<%=basePath%>treeAction.action;
        $(#queryMainForm).submit();
    }
  </script>
  <body>
  <form method="post" id = "importExcelSubmit" action="<%=basePath%>serviceAction.action">
          <exp:select code="PRODUCT_NAME" name="q_financeProductsCd" id="q_financeProductsCd" value = "${selectName }" headerValue="---请选择---" headerKey="" cssClass="q_name"></exp:select>
          <input type="button" onclick="importExcelJs();"  value="提交"/>
        <input type="submit" value="确定">
        <input type="button" onclick="btnSelect();"  value="测试"/>
        
  </form>
  <form method="post" id= "queryMainForm" action="<%=basePath%>selectAction.action">
      
      
          <input id="q_areaId" name = "employeeQueryVO.q_areaId" value = "${employeeQueryVO.q_areaId }" type="hidden" value=""/>
          <input id="q_dept" name = "employeeQueryVO.q_dept" value = "${employeeQueryVO.q_dept }" type="hidden" value=""/>
          <input id="q_deptName" name = "employeeQueryVO.q_deptName" value = "${employeeQueryVO.q_deptName }" type="hidden" value=""/>
        <input type="button" onclick="btnSelect();"  value="测试树状"/>
        <exp:treeSelect id="areaTree" value="${employeeQueryVO.q_areaId }"
                code="selectTree" expendLevel="10" rootNodeId="0"
                rootNodeName="地区列表" dataType="Require" msg="上级地区不能为空!"
                onClick="clickArea" />
        
        <exp:tree code="Tree" expendLevel="3"
            onClick="treeClick"
            checkStyle="ztree"
            params="${employeeQueryVO.q_areaId},${employeeQueryVO.q_areaId},${employeeQueryVO.q_areaId}"
            value="${employeeQueryVO.q_dept}" rootNodeId="0"
            rootNodeName="机构列表"></exp:tree>
  </form>
  <s:radio id = "radId" name = "radName" list="#{‘1‘:‘Yes‘,‘2‘:‘No‘,‘3‘:‘Yes3‘,‘4‘:‘No4‘,‘5‘:‘Yes5‘,‘6‘:‘No6‘}" value="2"></s:radio>
  <input type ="button" onclick="btnOnclik();" value="按钮">
  
  </body>
</html>
bubuko.com,布布扣

7,如果是springmvc好像要在web.xml里面加入你tld标签的引用(我这里工程建的单纯,就一个sturts2就不需要了);这里少Action类,(忘记了)这里也一并贴出来

1
2
3
4
5
6
7
8
9
10
<jsp-config>
    <taglib>      
     <taglib-uri>tlds/expend-tag.tld</taglib-uri>      
     <taglib-location>/WEB-INF/tlds/expend-tag.tld</taglib-location>   
    </taglib> 
    <taglib>
      <taglib-uri>/WEB-INF/report_config/runqianReport4.tld</taglib-uri>
      <taglib-location>/WEB-INF/report_config/runqianReport4.tld</taglib-location>
   </taglib>
</jsp-config>
bubuko.com,布布扣
package pro.services.impl;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import pro.entity.UIComponentBean;
import pro.utils.basebean.BaseQueryBean;
import pro.utils.basebean.EmployeeQueryVO;

public class GetList {

    
    
    public EmployeeQueryVO employeeQueryVO;
    
    

    public String getList()
    {
        HttpServletRequest request = ServletActionContext.getRequest();
        List<UIComponentBean> list = new ArrayList<UIComponentBean>();
        list.add(new UIComponentBean("A","男A"));
        list.add(new UIComponentBean("B","男B"));
        list.add(new UIComponentBean("C","男C"));
        list.add(new UIComponentBean("D","男D"));
        list.add(new UIComponentBean("E","男E"));
        list.add(new UIComponentBean("F","男F"));
        
        request.setAttribute("list", list);
        return "index";
    }
    
    public String Select()
    {

        HttpServletRequest request = ServletActionContext.getRequest();
        String selectName = request.getParameter("selectName");
        System.out.println("选择的select为:"+selectName);
        request.setAttribute("selectName", selectName);
        return "index";
    }
    
    public String Tree(){

        HttpServletRequest request = ServletActionContext.getRequest();
        
        System.out.println("选择地区:"+employeeQueryVO.getQ_areaId());
        System.out.println("选择的树节点:"+employeeQueryVO.getQ_dept());
        System.out.println("选择的树节点:"+employeeQueryVO.getQ_deptName());
        
        return "index";
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    public EmployeeQueryVO getEmployeeQueryVO() {
        return employeeQueryVO;
    }

    public void setEmployeeQueryVO(EmployeeQueryVO employeeQueryVO) {
        this.employeeQueryVO = employeeQueryVO;
    }

}
bubuko.com,布布扣

 

struts.xml就不用贴了相信大家都会。

 

 

 8,我贴出一些我这个标签操作文档

标签使用说明文档

1.数据准备

(1)如果是类别字典,请在TYPE_DICTIONARY表中进行录入数据,详细说明请参考Repositories\minxinloan\branches\doc\01开发文档\数据库设计\系统类别字典导入模版.xlsx

(2)如果是外键或者树结构,请手动在SYSTEM_CODE_CACHE表中进行配置。

 

SYSTEM_CODE_CACHE建表脚本请参见Repositories\minxinloan\branches\doc\01开发文档\数据库设计\公用表(SYSTEM_CODE_CACHE)Sql创建脚本.txt

SYSTEM_CODE_CACHE表字段说明

ID

表的主键,录入数据的时候不重复就可以了

CODE

不能重复的编码,不仅在本表中不能重复,要求与TYPE_DICTIONARY表里面的TYPE_CODE字段的记录也不能重复

NAME

当前查询的描述信息

LIST_SQL

1.查询的sql语句,要求能在plsql上面执行成功,不报错。

2.如果查询的是树结构的数据,要求按照id,上级id,树结构显示的name进行select,并且查询语句查询的结果集第一条数据是根节点,请对sql做好排序。

3.Sql里面可以带有参数,请用?标识。

IS_CACHED

设置是否缓存,外键表的数据建议不要缓存,以免查询到的数据不能及时更新,0表示不缓存,1表示缓存

 

2.标签使用说明

(1).exp:select标签,可配置的属性有:

code

对应要查询的UC_TYPE_DICTIONARY表里面的TYPE_CODE或者SYSTEM_CODE_CACHE表里面的CODE

params

如果查询语句里面有参数,传入的参数就配置在这里

id

select标签的唯一标识

name

标签的名称

headerKey

标签初始化时候的值

headerValue

标签初始化时候显示的文本

value

标签的值

cssClass

标签的样式

style

标签的样式,例如设置width

onChange

设置选择不同的值触发的事件

disabled

设置为true标识标签不可用

dataType

设置成Require表示改项必须选择

msg

为空的时候提示信息

 

使用例子:<exp:select code="EMPLOYEE_LIST" name="q_name" value="100"/>

(2) exp:radio标签,可配置的属性有:

code

对应要查询的UC_TYPE_DICTIONARY表里面的TYPE_CODE或者SYSTEM_CODE_CACHE表里面的CODE

params

如果查询语句里面有参数,传入的参数就配置在这里

name

标签的名称

value

标签的值

onChange

设置选择不同的值触发的事件

disabled

设置为true标识标签不可用

onClick

点击标签的时候触发的事件

colCount

每行显示的标签个数,默认显示5个

 

使用例子:<exp:radio code="EMPLOYEE_LIST" name="user" value="101"/>

(3) exp:checkboxlist标签,可配置的属性有:

code

对应要查询的UC_TYPE_DICTIONARY表里面的TYPE_CODE或者SYSTEM_CODE_CACHE表里面的CODE

params

如果查询语句里面有参数,传入的参数就配置在这里

name

标签的名称

value

标签的值, 多个值中间用,分开

onChange

设置选择不同的值触发的事件

disabled

设置为true标识标签不可用

onClick

点击标签的时候触发的事件

colCount

每行显示的标签个数,默认显示5个

 

使用例子:<exp:checkboxlist code="PWD_DATE" name="pwd_date" value="3,12"/>

(4) exp:tree标签,可配置的属性有:

code

对应要查询的UC_TYPE_DICTIONARY表里面的TYPE_CODE或者SYSTEM_CODE_CACHE表里面的CODE

params

如果查询语句里面有参数,传入的参数就配置在这里

id

树控件的id

checkStyle

设置显示的树是否需要checkbox或者radio

onChange

设置选择不同的值触发的事件

chkboxType

配置格式{‘Y‘:‘p‘,‘Y‘:‘s‘}。配置项说明,Y 属性定义 checkbox 被勾选后的情况;

N 属性定义 checkbox 取消勾选后的情况;

"p" 表示操作会影响父级节点;

"s" 表示操作会影响子级节点。

请注意大小写,不要改变

onClick

点击树节点触发的事件,配置的时候只需配置function的名称,不要跟括号。回调函数格式:

function treeClick(event,treeId,node){

        //……

  }

 

expendLevel

树加载完展开的级数,默认展开3级

value

树选中的值, 多个值中间用,分开

style

列表树显示的样式,可以通过style设置树形显示的大小,默认为width:200px;height:300px;

rootNodeId

虚拟的根节点id

rootNodeName

虚拟的根节点名称

 

 

使用例子:<exp:tree code="ORGAN_TREE" onClick="treeClick" checkStyle="checkbox" chkboxType="{‘Y‘:‘p‘,‘Y‘:‘s‘}"></exp:tree>

 

注:使用树控件需要引入<link rel="stylesheet" href="${ctxStatic}/jquery-ztree/3.5.12/css/zTreeStyle/zTreeStyle.css" type="text/css">

    <script type="text/javascript" src="${ctxStatic}/jquery-ztree/3.5.12/js/jquery.ztree.core-3.5.js"></script>

如果树需要配置checkbox,还需要引入

<script type="text/javascript" src="${ctxStatic}/jquery-ztree/3.5.12/js/jquery.ztree.excheck-3.5.js"></script>

对于树控件的其他操作,请参见项目\minxinloan\src\main\webapp\static\jquery-ztree\3.5.12\api

 

 

(5) exp:treeSelect标签,可配置的属性有:

code

对应要查询的UC_TYPE_DICTIONARY表里面的TYPE_CODE或者SYSTEM_CODE_CACHE表里面的CODE

params

如果查询语句里面有参数,传入的参数就配置在这里

id

树控件的id

checkStyle

设置显示的树是否需要checkbox或者radio

onChange

设置选择不同的值触发的事件

chkboxType

配置格式{‘Y‘:‘p‘,‘Y‘:‘s‘}。配置项说明,Y 属性定义 checkbox 被勾选后的情况;

N 属性定义 checkbox 取消勾选后的情况;

"p" 表示操作会影响父级节点;

"s" 表示操作会影响子级节点。

请注意大小写,不要改变

onClick

点击树节点触发的事件,配置的时候只需配置function的名称,不要跟括号。回调函数格式:

function treeClick(event,treeId,node){

        //……

  }

 

expendLevel

树加载完展开的级数,默认展开3级

value

树选中的值, 多个值中间用,分开

style

列表树显示的样式,可以通过style设置树形显示的大小,默认为width:200px;height:300px;

rootNodeId

虚拟的根节点id

rootNodeName

虚拟的根节点名称

dataType

设置成Require表示改项必须选择

msg

为空的时候提示信息

name

控件的名称

 

 

使用例子: <exp:treeSelect name="parentId"               code="MODULE_TREE" expendLevel="3" value="${module.parentId}"

                                            dataType="Require" msg="上级模块不能为空!" />

 

注:使用树控件需要引入<link rel="stylesheet" href="${ctxStatic}/jquery-ztree/3.5.12/css/zTreeStyle/zTreeStyle.css" type="text/css">

    <script type="text/javascript" src="${ctxStatic}/jquery-ztree/3.5.12/js/jquery.ztree.core-3.5.js"></script>

需要引入样式

<link rel="stylesheet" type="text/css" href="${ctxStatic}/css/treeSelect.css">

如果树需要配置checkbox,还需要引入

<script type="text/javascript" src="${ctxStatic}/jquery-ztree/3.5.12/js/jquery.ztree.excheck-3.5.js"></script>

对于树控件的其他操作,请参见项目\minxinloan\src\main\webapp\static\jquery-ztree\3.5.12\api

 

 10,有空的话给点评价(非常感谢。)

 

 

 

自定义标签tld,布布扣,bubuko.com

自定义标签tld

原文:http://www.cnblogs.com/puqiuxiaomao/p/3689191.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!