java 自定义标签(一)

继承TagSupport 类实现方法

主要步骤:

1.java类

package MyTag;

import java.io.IOException;

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

public class Tag extends TagSupport {
 private int pageSize;

 public int getPageSize() {
  return pageSize;
 }

 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }

 @Override
 public int doEndTag() throws JspException {
  JspWriter out =  pageContext.getOut();
  try {
 out.println("<table border ='1' bgcolor ='yellow'>");
   for(int i = 0; i < pageSize;i++){
    out.println("<tr>");
    out.println("<td>");
    out.println(i);
    out.println("</td>");
    out.println("<td>");
    out.println(i*10);
    out.println("</td>");
    out.println("</tr>");
   }
   out.println("</table>");
   out.println("<br/>");

  } catch (IOException e) {
   e.printStackTrace();
  }
  return super.doEndTag();
 }

 @Override
 public int doStartTag() throws JspException {
  // TODO Auto-generated method stub
  return super.doStartTag();
 }

}

2.jsp文件

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
   <%@ taglib uri="/mytag" prefix="tl" %>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

  <tl:showDataTag pageSize="4"></tl:showDataTag>
</body>
</html>

3.tld文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>bean</shortname>
<uri>MyTagLib</uri>
 <tag>        
 <name>showDataTag</name>
 <tagclass>MyTag.Tag</tagclass>
 <attribute>
 <name>pageSize</name>
 <required>true</required>

 </attribute>
   </tag>
  </taglib>

4.配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>MyProject</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <jsp-config>
   <taglib>
    <taglib-uri>/mytag</taglib-uri>
    <taglib-location>/WEB-INF/tagLib.tld</taglib-location>
   </taglib>  
  </jsp-config>
</web-app>
5.效果

6,.<taglib>配置介绍

<name>write</name>:这个Tag的名字
<tagclass>org.apache.struts.taglib.bean.WriteTag</tagclass>:这个Tag是由那个类实现的(这个class可以在struts.jar包中找到)
<bodycontent>empty</bodycontent>:这个Tag可以直接结尾,不需要填写内容
   这里bodycontent有三个可选值
      jsp        标签体由其他jsp元素组成   
         如果其有jsp元素,那么标签会先解释,然后将元素的实际值传入。比如标签体里含有<%=attributeName%>这样子的jsp元素,此时标签会按attributeName的实际值是什么就传入什么。这个是最常用的一个。
      empty   标签体必须为空   
         在引用这个Tag的时候,可以<bean:write bundle="attributeName" />,而不必<bean:write bundle="attributeName" ></bean:write> 
      tagdependent   由标签解释,不带jsp转换 
<attribute> </attribute>这里标识的是这个Tag的一个参数
<name>bundle</name>这个参数的名字
<required>false</required>这个参数是否是必填相
  如果为true则必须写这个参数,否则会报错
<rtexprvalue>true</rtexprvalue>是说这个标签的值可以写入
  rtexprvalue:"RUN-TIME EXPRESSION VALUE",是否可以动态赋值,在jsp中如value="<%=attributeName%>"

你可能感兴趣的:(自定义标签)