首页 > 代码库 > 自定义标签(JSTL)
自定义标签(JSTL)
自定义标签的步骤:
1、确定需求,如:用<my:date/>输出当前时间
2、编写Java类:需要实现实现接口javax.servlet.jsp.tagext.JspTag
具体的接口为:
javax.servlet.jsp.tagext.SimpleTag,简单标签,JSP2.0**
javax.servlet.jsp.tagext.Tag,经典标签
3、编写tdl文件(xml)
Demo:
1 public class MyTag implements SimpleTag { 2 3 private PageContext pageContext; 4 public void setJspContext(JspContext pc) { 5 6 this.pageContext=(PageContext) pc;//设置pageContext 7 } 8 9 public void doTag() throws JspException, IOException {10 11 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS");12 String date=format.format(new Date());13 pageContext.getOut().print(date);//输出到页面14 }15 16 public JspTag getParent() {17 // TODO Auto-generated method stub18 return null;19 }20 21 public void setJspBody(JspFragment arg0) {22 // TODO Auto-generated method stub23 24 }
1 <?xml version="1.0" encoding="UTF-8" ?> 2 3 <taglib xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 6 version="2.1">
<!-- 确定当前标签库的版本 --> 7 <tlib-version>1.0</tlib-version> 8 <short-name>my</short-name> <!-- 建议引入当前便签库是,使用的简写--> 9 <uri>http://www.cnblogs.com/liuwt365/mytag</uri> <!-- 为当前标签库配置文件,起一个名称 * 内容:自定义,全球唯一 -->10 11 <tag>12 <name>date</name> <!-- 确定标签名称 -->13 <tag-class>cn.test.simpleTag.MyTag</tag-class> <!-- 确定实现类 -->14 <body-content>empty</body-content> <!-- 格式化当前标签的body内容-->15 </tag>16 17 </taglib>
1 <%@ taglib uri="http://www.cnblogs.com/liuwt365/mytag" prefix="my" %> <!-- 页面注册 -->2 3 <my:date/>
PS:如果标签中含有属性,则tdl中需要设置:<my:maxValue num1="13" num2="15"></my:maxValue>
1 <tag> 2 <name>max</name> 3 <tag-class>cn.test.simpleTag.MyMaxTag</tag-class> 4 <body-content>empty</body-content> 5 <attribute> 6 <name>num1</name> 7 <required>true</required> 8 <rtexprvalue>true</rtexprvalue> 9 <type>java.lang.Integer</type>10 </attribute>11 12 <attribute>//设置属性13 <name>num2</name>//属性名14 <required>true</required>//是否必须 true|false (yes|no)(非必须)15 <rtexprvalue>true</rtexprvalue> //runtime expression value 运行时表达式16 <type>java.lang.Integer</type> //类型(非必须)17 </attribute>18 </tag>
如果含有标签体,tdl中设置如下:<my:toUpper>JUHjdksds</my:toUpper>
<tag> <name>toUpper</name> <tag-class>cn.test.simpleTag.MyToUpperTag</tag-class> <body-content>scriptless</body-content>
<!-- 确定标签体的类型
* empty:没有标签体
* JSP:支持JSP所有的语法,在Tag中使用
* scriptless:对于JSP页面的脚本不支持 <%%>
* tagdependent:标签体不做处理,原样输出
-->
</tag>
如果含有标签体 ,java类中的
1 public void setJspBody(JspFragment jf) {2 this.jspFragment=jf; //获取 3 }
向jsp页面输出时
1 StringWriter stringWriter=new StringWriter();//获得流2 3 this.jspFragment.invoke(stringWriter);//将数据写入到流中4 String data=http://www.mamicode.com/stringWriter.toString().toUpperCase();5 6 this.pageContext.getOut().print(data);7
this.jspFragment.invoke(pageContext.getOut())=this.jspFragment.invoke();
自定义标签(JSTL)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。