JSP自定义标签(二)- 传递属性

来源:互联网 发布:断食四天减肥知乎 编辑:程序博客网 时间:2024/05/22 15:56

上一篇写了一个简单的标签,输出的内容都是写死的。这一篇定义一个标签,内容是可以自己编辑的。
首先说一下,我大概要干什么:我想定义这样一个标签,我传给标签两个字符串(一个header,一个items),标签最后会按照table的形式展现出来。

同样要做两件事:

编写标签处理器
注册标签

标签处理器:

package myTag;import java.io.IOException;import java.util.StringTokenizer;import javax.servlet.jsp.JspContext;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.SimpleTagSupport;public class SecondTag extends SimpleTagSupport {    /* 标签要接收的属性 */    private String header;      private String items;    /* sett,gett方法*/    public void setHeader(String header) {        this.header = header;    }    public void setItems(String items) {        this.items = items;    }    public String getHeader() {        return header;    }    public String getItems() {        return items;    }    public void doTag() throws IOException, JspException {        JspContext context = getJspContext();        /* 得到输出对象 */        JspWriter out = context.getOut();        out.print("<table style='border:1px solid green'>\n" +                     "<tr>" +                        "<td><span style='font-weight:bole'>" + getHeader() + "</span></td>" +                    "</tr>");        StringTokenizer tokenizer = new StringTokenizer(getItems(), ",");        while(tokenizer.hasMoreElements()) {            String token = tokenizer.nextToken();            out.print("<tr>" +                        "<td>" + token + "</td>" +                      "</tr>");        }        out.print("</table>");    }}

注册标签:

<!-- Second Tag -->    <tag>        <name>dataFormatter</name>        <tag-class>myTag.SecondTag</tag-class>        <body-content>empty</body-content>        <attribute><!-- header -->            <name>header</name>            <required>true</required>        </attribute>        <attribute><!-- 类容 -->            <name>items</name>            <required>true</required>        </attribute>    </tag>

jsp:

<%@ taglib uri="/WEB-INF/mytags.tld" prefix="easy" %><%@ page contentType="text/html;charset=UTF-8" language="java"  pageEncoding="UTF-8"  %><html>    <head></head>    <meta charset="UTF-8">     <body>        <h1>第一个标签</h1>        <easy:firstTag></easy:firstTag>        <br/>        <h1>第二个标签</h1>        <easy:dataFormatter header="标题" items="A,B,C" />        <!-- 可变的输出类容完成 -->    </body></html><!-- <%@ page contentType="text/html;charset=UTF-8" language="java"  pageEncoding="UTF-8"  %>这个不加会出现乱码,如果加上还有乱码,就再去找一下原因,注意jsp的文件编码。 -->

运行结果:
这里写图片描述
(其实自定义标签比较简单,可以理解为定义一个类,然后在类里面获得JspWriter对象,接下来,想怎么输出都可以了)