JSP 标签学习笔记

canca canca
2010-04-10 12:51
1
0






















特别注意,这些标签接口(类)是有缓存的,这个对线程安全非常不利。






这个接口没有缓冲,每次调用标签就创建一个新的实例。


但是要设置.tld文件中<tag>的<body-content>tagdependent</body-content>






de><?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
 <tlib-version>1.0</tlib-version>
 <short-name>writer</short-name>
 <uri>tags/MessageWriter</uri>
 <tag>
   <name>write</name>
   <tag-class>com.lilijun.tags.MessageWriterTagHandler</tag-class>
   <body-content>JSP</body-content>
   <attribute>
     <name>fontColor</name>
     <required>true</required>>
   </attribute>
 </tag>
</taglib>

5.在jsp中使用
有三种方法:

(1)web.xml中配置一个<taglib>节点,如下:
<jsp-config>
    <taglib>
        <taglib-uri> de> de>/mytag</taglib-uri>
        <taglib-location> /WEB-INF/tlds/hello.tld</taglib-location>
    </taglib>
</jsp-config>
JSP中如下写:
<%@ taglib uri="/mytag" prefix="mytag" %>

(2)不在web.xml中配置,直接在JSP中使用TLD文件的位置:
JSP中如下写:
<%@ taglib uri="/web-inf/tlds/hello.tld" prefix="mytag" %>

(3)在jsp中直接指定tag的url
<%@ taglib uri="/mytag" prefix="mytag" %>


下面是一个基于SimpleTag的例子:


标签动作Java类:

package tag;

imp ort java.io.IOException;

imp ort javax.servlet.jsp.JspContext;
imp ort javax.servlet.jsp.JspException;
imp ort javax.servlet.jsp.JspWriter;
imp ort javax.servlet.jsp.tagext.JspFragment;
imp ort javax.servlet.jsp.tagext.SimpleTagSupport;

/***
 * 测试的简单标签
 * @author liheyuan
 *
 */
public class HelloTag1 extends SimpleTagSupport
{
    /**测试属性name*/
    private String name;
    /**标签体*/
    private JspFragment body;
   
    public void setJspBody(JspFragment body)
    {
        this.body = body;
    }
   
    public void doTag()throws JspException,IOException
    {
        JspContext ctx = this.getJspContext();
        JspWriter out = ctx.getOut();
        out.println("<h1>"+name+",</h1>");
        body.invoke(out);
    }
   
   
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

tld定义

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib
    PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
    "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>tagSample</short-name>
    <uri>/mytag</uri>
    <tag>
        <name>hello1</name>
        <tag-class>tag.HelloTag1</tag-class>
        <body-content>tagdependent</body-content>
        <attribute>
            <name>name</name>
            <type>java.lang.String</type>
        </attribute>
    </tag>
</taglib>

JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/mytag" 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>
<mytag:hello1 name="李赫元" >
你好!
</mytag:hello1>
</body>
</html>

发表评论