JSP自定义标签
需要在WEB-INFO/lib下导入:
jstl.jar standard.jar(官网提供下载)
为了解决jsp页面的丑陋和难以阅读,以及jsp和html页面混乱,美工人员难以开发,因而使用jsp自定义标签库
1、Jsp2开发标签库的步骤:
1.开发自定义标签处理类,
2.建立一个*.tld文件,每个*.tad文件对应一个标签库,一个标签库对应多个标签
3.在jsp页面中使用自定义标签
2、Jsp自定义标签库要求:
1.继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,如果要动态属性还要实现dynamicAttributes类
2.如果标签类包含属性,每个属性都要提供get和set方法
3.重写doTag()方法,这个方法负责生成页面内容。
3、建立tld文件
1.可以在Tomcat下的webapps/examples/WEB_INFO/jsp2下的.tld文件复制过来修改。
2.taglib是根元素,有如下三个子元素:
1)tlib-varsion:指定标签库实现的版本
2)short-name:该标签库的默认短名
3)uri:这个属性非常重要,指定标签库的uri相当于唯一标识
3.每个taglib下有多个tag,tag有一下属性
1)name:该标签的名称,很重要,在jsp页面就是通过name来使用标签的。
2)tag-class:指定标签的处理类
3)body-content:指定标签的内容:
。tagdependent:指定标签处理类自己负责处理标签体。
。empty:指定该标签只能作为空标签使用
。scriptless:指定该标签的标签体可以使用静态的html元素、表达式语言、但不能出现jsp脚本。
。jsp:指定该标签的标签体可以使用jsp脚本,但在jsp2规范中不再推荐使用jsp,所以实际上body-content元素的值 不能是jsp。
4、使用标签:(参考疯狂J2EE轻量级企业开发)
1.导入标签库 2.使用标签
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="www.duriancoder.com" prefix="mytag"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body bgcolor="#ffffc0"> <h2>下面显示的是自定义标签中的内容</h2> <mytag:helloWorld/><br/></body></html>
3.带属性的标签:
//.jsp<durian:query driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3307/webdemo" username="root" password="henhaowo5" sql="select * from user" /><br/>//.tld <tag> <name>query</name> <tag-class>com.duriancoder.tag.QueryTag</tag-class> <body-content>empty</body-content> <attribute> <name>driver</name> <required>true</required> <fragment>true</fragment> </attribute> </tag>//class类继承simpleTagsupport类给属性提供相应的getset方法,实现doTag()方法
4.带标签体的标签:
//.jsp<% List<String> a = new ArrayList<String>(); a.add("My name is"); a.add("Durian"); a.add("Coder"); pageContext.setAttribute("a", a); %> <table border="1px" bgolor="#aaaadd" width="300"> <!-- 使用迭代器标签,对a集合进行迭代 --> <mytag:iterator item="item" collection="a"> <tr> <td>${pageScope.item}</td> </tr> </mytag:iterator>//.tld <tag> <name>iterator</name> <tag-class>com.duriancoder.tag.IteratorTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>collection</name> <required>true</required> <fragment>true</fragment> </attribute> <attribute> <name>item</name> <required>true</required> <fragment>true</fragment> </attribute> </tag>//.classprivate String collection;private String item;@Override public void doTag() throws JspException, IOException { Collection itemList = (Collection)getJspContext().getAttribute(collection); //遍历集合 for (Object s : itemList) { //将集合的元素设置到page范围内 getJspContext().setAttribute(item, s); //输出标签体 getJspBody().invoke(null); } }
5.动态属性的标签:处理类要继承simpleTagSupport实现dynamicAttributes类
.classpublic class DynaAttributesTag extends SimpleTagSupport implements DynamicAttributes { private ArrayList<String> keys = new ArrayList<String>(); private ArrayList<Object> values = new ArrayList<Object>();
@Override public void doTag() throws JspException, IOException { JspWriter out = getJspContext().getOut(); //此处只是简单的输出每个属性 out.println("<ol>"); for (int i = 0 ; i < keys.size(); i++) { String key = keys.get(i); Object value = values.get(i); out.println("<li>" + key + "=" + value + "</li>"); } out.println("</ol>"); }
@Override public void setDynamicAttribute(String uri, String localName, Object value) throws JspException { //添加属性名、值 keys.add( localName ); values.add( value ); }
}
//.tld <tag> <name>dynaAttr</name> <tag-class>com.duriancoder.tag.DynaAttributesTag</tag-class> <body-content>empty</body-content> <!-- 指定支持动态属性 --> <dynamic-attributes>true</dynamic-attributes> </tag>
//.jsp<h2>下面显示的是自定义标签中的内容</h2> <h4>指定两个属性</h4> <mytag:dynaAttr name="durian" url="www.duraincoder.com"/></br> <h4>指定4个属性</h4> <mytag:dynaAttr 名字="durian" 价格="30/kg" 产地="CS" />
相关文章
- [转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案
- jsp页面form表单提交时候乱码
- WebContent下新建目录放入jsp,跳转servlet页面出错解决
- ASP,ASP.net,JSP语法、内置对象对比
- 【转】JSP总结
- Jsp重定向(response.sendRedirect())和转发(request.getRequestDispatcher().forward(request,r)的差别
- response.sendRedirect跳转 jsp:forward跳转
- Eclipse和JSP:. lang。NoSuchMethodError:javax.servlet.jsp.tagext.TagAttributeInfo。(Ljava / lang / String;ZLjava / lang /字符串;ZZ)V
- JSP案例_简单实现验证码
- Django框架之第五篇(模板层) --变量、过滤器、标签、自定义标签、过滤器,模板的继承、模板的注入、静态文件