jsp中自定义Taglib详解

时间:2021-05-26

一、自定义标签入门之无参数自定义标签

1.开发自定义标签类

当我们在JSP页面使用一个简单的标签时,底层实际上由标签处理类提供支持,从而可以使用简单的标签来封装复杂的功能,从而使团队更好地协作开发(能让美工人员更好地参与JSP页面的开发)。

自定义标签类都必须继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport,或者TagSupport除此之外,JSP自定义标签类还有如下要求。

如果标签类包含属性,每个属性都有对应的getter和setter方法。

重写doTag()或者doStartTag()或doEndTag()方法方法,这个方法负责生成页面内容。

首先介绍是不带属性的标签以HelloWorld为例:

Java代码如下:

public class HelloWorldTag extends TagSupport { private static final long serialVersionUID = -3382691015235241708L; @Override public int doEndTag() throws JspException { try { pageContext.getOut().write("Hello World !"); return super.doEndTag(); } catch (JspException e) { e.printStackTrace(); return 0; } catch (IOException e) { e.printStackTrace(); return 0; } } @Override public int doStartTag() { try { pageContext.getOut().write("Hello World"); return super.doStartTag(); } catch (JspException e) { e.printStackTrace(); return 0; } catch (IOException e) { e.printStackTrace(); return 0; } }}

注意:

问题1:tagsupport中的dostartTag和doEndTag这两个方法有什么区别
doStartTag是在扫描到起始标签时调用,doEndTag是在扫描到结束标签是调用。
例如:<helloWorld> helloWorld</helloWorld>
则jsp引擎分析到<helloWorld> 时调用doStratTag, 分析到</helloWorld>时调用doEndTag

2、建立TLD文件

TLD是Tag Library Definition的缩写,即标签库定义,文件的后缀是tld,每个TLD文件对应一个标签库,一个标签库中可包含多个标签,TLD文件也称为标签库定义文件。

标签库定义文件的根元素是taglib,它可以包含多个tag子元素,每个tag子元素都定义一个标签。通常我们可以到Web容器下复制一个标签库定义文件,并在此基础上进行修改即可。例如Tomcat6.0,在webapps\examples\WEB-INF\jsp2路径下包含了一个jsp2-example-taglib.tld文件,这就是示范用的标签库定义文件。

将该文件复制到Web应用的WEB-INF/路径,或WEB-INF的任意子路径下,并对该文件进行简单修改,修改后的helloworld.tld文件代码如下:

<?xml version="1.0" encoding="UTF-8"?><taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http:///jsp/jstl/core</uri>1314 <!-- 创建自定义 迭代标签 -->15 <tag>16  <name>forEach</name>17  <tag-class>exercise.taglib.ForEach</tag-class>18  <!-- 如果没有标签体,设置empty , 如果有标签休必须设置JSP-->19  <body-content>JSP</body-content>20  <attribute>21   <name>id</name>22   <required>true</required><!-- 标识属性是否是必须的 -->23   <rtexprvalue>true</rtexprvalue><!-- 标识属性值是否可以用表达式语言 -->24  </attribute>25  <attribute>26   <name>collection</name>27   <required>true</required>28   <rtexprvalue>true</rtexprvalue>29  </attribute>30 </tag>3132 <!-- 创建自定义获得属性标签 -->33 <tag>34  <name>getProperty</name>35  <tag-class>exercise.taglib.GetProperty</tag-class>36  <body-content>empty</body-content>37  <attribute>38   <name>name</name>39   <required>true</required>40   <rtexprvalue>true</rtexprvalue>41  </attribute>42  <attribute>43   <name>property</name>44   <required>true</required>45   <rtexprvalue>true</rtexprvalue>46  </attribute>47 </tag>4849 <!-- 配置一个表达式调用 的函数 -->50    <function>51     <name>add</name><!-- 配置一个标签,在JSP页面通过引用前缀调用 -->52     <function-class>exercise.taglib.ELFunction</function-class><!-- 实现类 -->53     <function-signature>int add(int,int)</function-signature><!-- 静态的方法:包括返回类型,方法名,入参的类型 -->54    </function>55</taglib>

在web.xml文件中配置自定义标签

<jsp-config> <taglib> <taglib-uri>firstTag</taglib-uri> <taglib-location>/WEB-INF/tag.tld</taglib-location> </taglib></jsp-config> 在jsp文件中使用标签:tag.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="firstTag" prefix="my"%><jsp:useBean id="userVo1" class="exercise.vo.UserVo" scope="request"> <jsp:setProperty name="userVo1" property="name" value="Hackiller"/> <jsp:setProperty name="userVo1" property="password" value="123"/></jsp:useBean><jsp:useBean id="userVo2" class="exercise.vo.UserVo" scope="request"> <jsp:setProperty name="userVo2" property="name" value="YangYang"/> <jsp:setProperty name="userVo2" property="password" value="456"/></jsp:useBean><% List list = new ArrayList(); list.add(userVo1); list.add(userVo2); pageContext.setAttribute("voList",list);%><html> <head> <title>My JSP 'tag.jsp' starting page</title> </head> <body> <h2 align="center">This is my JSP page:测试taglib.</h2> <hr> <h2>自定义迭代标签:</h2> <table> <tr><td>姓名</td><td>密码</td></tr> <my:forEach collection="voList" id="uservo"> <tr> <td><my:getProperty name="uservo" property="name"/></td> <td><my:getProperty name="uservo" property="password"/></td> </tr> </my:forEach> </table> <hr> <h2>表达式调用类的静态方法:</h2> 2+5=${my:add(2,5)} </body></html>

以上就是小编为大家带来的jsp中自定义Taglib详解全部内容了,希望大家多多支持~

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章