A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周志龙 中级黑马   /  2013-10-10 10:34  /  1073 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、编写**.tld文件
  1. [html]  
  2. <?xml version="1.0" encoding="UTF-8" ?>  
  3. <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"  
  5.     version="2.0">  
  6.     <!-- 标签库的版本号 -->  
  7.     <tlib-version>1.0</tlib-version>  
  8.     <!-- 标签库的默认前缀 -->  
  9.     <short-name>candy</short-name>  
  10.     <!-- 标签库的默认URI -->  
  11.     <uri>/candy</uri>  
  12.   
  13.     <!-- 带遮罩的网页对话框标签 -->  
  14.     <tag>  
  15.         <description>带遮罩的网页对话框标签</description>  
  16.         <name>msgdialog</name>  
  17.         <tag-class>candy.tld.MsgDialogTag</tag-class>  
  18.         <!-- 标签体可以是静态HTML元素,表达式语言,但不允许出现JSP脚本 -->  
  19.         <body-content>scriptless</body-content>  
  20.         <attribute>  
  21.             <description>对话框标题文字,默认为"温馨提示"</description>  
  22.             <name>title</name>  
  23.             <required>false</required>  
  24.             <!-- 可以使用JSP表达式 -->  
  25.             <rtexprvalue>true</rtexprvalue>  
  26.         </attribute>  
  27.         <attribute>  
  28.             <description>遮罩的高度,默认为屏幕的高度,即100%</description>  
  29.             <name>height</name>  
  30.             <required>false</required>  
  31.             <!-- 可以使用JSP表达式 -->  
  32.             <rtexprvalue>true</rtexprvalue>  
  33.         </attribute>  
  34.         <attribute>  
  35.             <description>对话框的顶部距离,默认为300px</description>  
  36.             <name>top</name>  
  37.             <required>false</required>  
  38.             <!-- 可以使用JSP表达式 -->  
  39.             <rtexprvalue>true</rtexprvalue>  
  40.         </attribute>  
  41.         <attribute>  
  42.             <description>对话框的宽度,默认为500px</description>  
  43.             <name>boxwidth</name>  
  44.             <required>false</required>  
  45.             <!-- 可以使用JSP表达式 -->  
  46.             <rtexprvalue>true</rtexprvalue>  
  47.         </attribute>  
  48.         <attribute>  
  49.             <description>基本URL</description>  
  50.             <name>basepath</name>  
  51.             <required>true</required>  
  52.             <!-- 可以使用JSP表达式 -->  
  53.             <rtexprvalue>true</rtexprvalue>  
  54.         </attribute>  
  55.         <attribute>  
  56.             <description>临时ID后缀,避免ID冲突,默认为系统时间的毫秒数</description>  
  57.             <name>tmpid</name>  
  58.             <required>false</required>  
  59.             <!-- 可以使用JSP表达式 -->  
  60.             <rtexprvalue>true</rtexprvalue>  
  61.         </attribute>  
  62.     </tag>  
  63. </taglib>  
复制代码
2.编写工具类
  1. [java]  
  2. package candy.tld;  
  3.   
  4. import java.io.*;  
  5. import javax.servlet.jsp.JspException;  
  6. import javax.servlet.jsp.tagext.JspFragment;  
  7. import javax.servlet.jsp.tagext.SimpleTagSupport;  
  8.   
  9. /** 带遮罩的网页对话框自定义标签类 */  
  10. public class MsgDialogTag extends SimpleTagSupport {  
  11.   
  12.     String title = "温馨提示"; // 对话框标题文字  
  13.     String height = "100%"; // 遮罩的高度,默认为屏幕的高度,即100%  
  14.     String top = "300px"; // 对话框的顶部距离,默认为100px  
  15.     String boxwidth = "330px";// 对话框的宽度,默认为500px  
  16.     String basepath = ""; // 基本URL  
  17.     String tmpid = null; // 临时ID后缀,避免ID冲突,默认为系统时间的毫秒数  
  18.   
  19.     /** 标签体处理 */  
  20.     public void doTag() throws JspException, IOException {  
  21.         // 规范属性值  
  22.         if (!height.endsWith("%"))  
  23.             height = height + "px";  
  24.         if (!top.endsWith("px"))  
  25.             top = top + "px";  
  26.         if (!boxwidth.endsWith("px"))  
  27.             boxwidth = boxwidth + "px";  
  28.         int titlewidth = Integer.valueOf(boxwidth.replaceAll("px", ""))  
  29.                 .intValue() - 22;  
  30.         if (tmpid == null)  
  31.             tmpid = String.valueOf(System.currentTimeMillis());// 临时ID后缀,避免ID冲突  
  32.   
  33.         // 取得现有标签体的内容  
  34.         JspFragment body = this.getJspBody();  
  35.         StringWriter writer = new StringWriter();  
  36.         body.invoke(writer);  
  37.   
  38.         // 构造带遮罩的网页对话框  
  39.         StringBuffer sb = new StringBuffer();  
  40.         sb.append("<style>\n");  
  41.         sb.append("#msgbox"  
  42.                 + tmpid  
  43.                 + "{width:"  
  44.                 + boxwidth  
  45.                 + ";background: #D6D3CE; border:1px #848284 solid;padding:0px;margin:0 auto;}\n");  
  46.         sb.append(".msgicon{float:left;background-image:url("  
  47.                 + basepath  
  48.                 + "/img/msgtitle_icon.jpg); background-repeat:no-repeat; height:20px;width:20px;}\n");  
  49.         sb.append(".msgtilte{float:left; text-align:left;background-image:url("  
  50.                 + basepath  
  51.                 + "/img/msgtitle_back.jpg); background-repeat:repeat-x;line-height:20px;letter-spacing:2px; height:20px; width:"  
  52.                 + titlewidth + "px;}\n");  
  53. //      sb.append(".msgclose{float:left;background-image:url("  
  54. //              + basepath  
  55. //              + "/img/btn_close.jpg); background-repeat:no-repeat; height:20px; width:20px; cursor:pointer;}\n");  
  56.         sb.append(".msgmainbox{clear:both; border-top:1px #848284 solid;text-align:left;padding:20px;overflow: auto;}\n");  
  57.         sb.append("</style>\n");  
  58.         sb.append("<div id='mask"  
  59.                 + tmpid  
  60.                 + "' style='clear:both;top:0;left:0;position:absolute;z-index:10001;filter:alpha(opacity=70);background:#000;opacity: 0.7;-moz-opacity: 0.7;height:"  
  61.                 + height + ";width:100%;'></div>\n");  
  62.         sb.append("<div id='msgprompt"  
  63.                 + tmpid  
  64.                 + "' style='clear:both;top:"  
  65.                 + top  
  66.                 + ";left:0;position: absolute; z-index: 10002; width:100%;text-align:center'>\n");  
  67.         sb.append("<div id='msgbox" + tmpid + "'>\n");  
  68.         sb.append("<div class='msgicon'></div>\n");  
  69.         sb.append("<div class='msgtilte'>" + title + "</div>\n");  
  70. //      sb.append("<div class='msgclose' onClick='closemask" + tmpid  
  71. //              + "()'></div>\n");  
  72.         sb.append("<div class='msgmainbox'>\n");  
  73.         // 插入标签体中的提示信息内容  
  74.         sb.append(writer.toString().trim() + "\n");  
  75.         sb.append("</div>\n");  
  76.         sb.append("</div>\n");  
  77.         sb.append("</div>\n");  
  78. //      sb.append("<script language='javascript'>\n");  
  79. //      sb.append("function closemask" + tmpid + "(){\n");  
  80. //      sb.append("document.getElementById('mask" + tmpid  
  81. //              + "').style.display='none';\n");  
  82. //      sb.append("document.getElementById('msgprompt" + tmpid  
  83. //              + "').style.display='none';\n");  
  84. //      sb.append("}\n");  
  85. //      sb.append("</script>\n");  
  86.         sb.append("</div>\n");  
  87.         // 输出处理结果到页面上  
  88.         getJspContext().getOut().println(sb);  
  89.     }  
  90.   
  91.     public String getTitle() {  
  92.         return title;  
  93.     }  
  94.   
  95.     public void setTitle(String title) {  
  96.         this.title = title;  
  97.     }  
  98.   
  99.     public String getBasepath() {  
  100.         return basepath;  
  101.     }  
  102.   
  103.     public void setBasepath(String basepath) {  
  104.         this.basepath = basepath;  
  105.     }  
  106.   
  107.     public String getHeight() {  
  108.         return height;  
  109.     }  
  110.   
  111.     public void setHeight(String height) {  
  112.         this.height = height;  
  113.     }  
  114.   
  115.     public String getTop() {  
  116.         return top;  
  117.     }  
  118.   
  119.     public void setTop(String top) {  
  120.         this.top = top;  
  121.     }  
  122.   
  123.     public String getBoxwidth() {  
  124.         return boxwidth;  
  125.     }  
  126.   
  127.     public void setBoxwidth(String boxwidth) {  
  128.         this.boxwidth = boxwidth;  
  129.     }  
  130.   
  131.     public String getTmpid() {  
  132.         return tmpid;  
  133.     }  
  134.   
  135.     public void setTmpid(String tmpid) {  
  136.         this.tmpid = tmpid;  
  137.     }  
  138. }  
复制代码
3.页面导入标签
  1. [html]
  2. <%@ taglib prefix="candy" uri="/candy" %>  
复制代码
4.页面调用标签
  1. [html]  
  2. <candy:msgdialog basepath="<%=request.getContextPath()%>">  
  3.     请输入登录密码解锁:<br><br>  
  4.     <input type="text" id="passText" >  
  5.     <input type="button" onclick="valSystemLock()" value="解锁" class="btn" style="margin-bottom: 8px;" />  
  6.     <br>  
  7.     <span id="valmsg" style="color: red;"></span>  
  8. </candy:msgdialog>  
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马