jsp自定义标签分析

时间:2021-02-25 05:27:21

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)