jsp自定义标签分析

jsp自定义标签的优势体现在于jsp页面上面减少了java代码.

jsp自定义标签有三大部分组成,首先是类继承TagSupport,实现doStartTag方法.

public int doStartTag() throws JspException {
        log.info("partsMgrService:" + partsMgrService);
        log.info("Log style: " + style);
        log.info("Log rowid: " + rowid);

        StringBuffer html = new StringBuffer();
        List li = partsMgrService.listTreePartsType();

        for (int i = 0; i < li.size(); i++) {
            PartsTypeDTO dto = (PartsTypeDTO) li.get(i);
            if (style.equals("header") || style == "header") {
                styleHeaderJsp(html, dto);
            } else if (style.equals("mall") || style == "mall") {
                styleMallJsp(i, html, dto);
            }
        }

        log.info("html:" + html.toString());
        JspWriter out = pageContext.getOut();
        try {
            out.print(html.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Tag.SKIP_BODY;
    }

如果存在属性,需要提供get,set方法。另外一个是tag中的Service对象不能依赖注入。需要使用getBean()方法获取。

第二步,创建tld文件。

<?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>
    <jsp-version>2.0</jsp-version>
    <tag>
        <name>show</name>
        <tag-class>com.bn.car.core.tag.PartsTypeTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
            <name>style</name> <!-- 属性名字 -->
            <required>false</required> <!-- 是否必须 -->
            <rtexprvalue>true</rtexprvalue> <!-- 表示是否可以使用JSP表达式 -->
        </attribute>
        <attribute>
            <name>rowid</name> <!-- 属性名字 -->
            <required>false</required> <!-- 是否必须 -->
            <rtexprvalue>true</rtexprvalue> <!-- 表示是否可以使用JSP表达式 -->
        </attribute>
    </tag>
</taglib>

 

第三步,在jsp页面上引用。

<%@ taglib uri="/WEB-INF/tld/partstypetag.tld" prefix="dd"%>

<dd:show style="mall" rowid="<%=_ul %>"/> 

允许动态传参。需要在tld文件中配置rtexprvalue项。

需要的jar: jstl.jar,servlet.jar,standard.jar lib包。更多详细代码请看以下链接:

http://developer.51cto.com/art/200907/134263.htm

(文章写的挺好,但是在tld配置文件中出现了requried,rtexprvale 写法错误! 有误导,正确的写法应该是 required, rtexprvalue)

posted @ 2013-12-15 11:36  全新时代-小小程序员大梦想  阅读(259)  评论(1编辑  收藏  举报