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)

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