自定义标签库是一种非常优秀的表现层组件技术。通过使用自定义标签库,可以在简单的标签中封装复杂的功能。
目前在工作中,发现他们的项目中使用了Jsp的自定义标签,查了一些资料,整理了篇对初学者能够快速上手的文章。
1.为什么使用自定义标签呢?
主要是在HTML页面中插入JSP脚本有如下几个坏处:
JSP脚本非常丑陋,难以阅读;JSP脚本和HTML代码混杂,维护成本高;HTML页面中嵌入JSP脚本,导致美工人员难以参与开发。
出于以上几点考虑,我们需要一种可以在页面中使用的标签,这种标签具有和HTML标签类似的语法,但有可能完成JSP脚本的功能,这种标签就是JSP自定义标签。
2.开发标签库的几个步骤:
一、开发自定义标签的处理类
在JSP使用一个简单的标签时,底层实际上由标签处理类提供支持,从而可以通过简单的标签来封装复杂的功能。
自定义标签应该继承一个父类:javax.servlet.jsp.tagext.TagSupport;
如果标签类包含属性,则每个属性都有对应的getter和setter方法。
重写doTag()方法,这个方法负责生成页面内容。
下面这个是一个实例:先看一下效果图:
public class PageHeadTagThree extends TagSupport {
private Page<T> page;
private Long funmenuId;// 功能菜单ID
public Page<T> getPage() {
return page;
}
public void setPage(Page<T> page) {
this.page = page;
}
public Long getFunmenuId() {
return funmenuId;
}
public void setFunmenuId(Long funmenuId) {
this.funmenuId = funmenuId;
}
public int doStartTag() {
JspWriter out = pageContext.getOut();
StringBuffer result = new StringBuffer();
result
.append("</div><div class=\"btnbox\">"
+ "<div class=\"tab-list\">"
+ getFunOperatesNew(funmenuId)
+ "</div><div class=\"toolbar\"><div id=\"macstyle\" class=\"select-text\">"
+ "<select id=\"pageNum\" name=\"pageNum\" οnchange=\"flippage(this.value);\">"
+ options() + "</select></div>");
if (page.isHasPre())
result.append("<a href=\"javascript:flippage('"
+ (page.getPageNo() - 1)
+ "')\" class=\"prevbtn yuan\"><span></span></a>");
else
result.append("<a class=\"prevbtn_no yuan\"><span></span></a>");
if (page.isHasNext())
result.append("<a href=\"javascript:flippage('"
+ (page.getPageNo() + 1)
}
二、建立一个*.tld文件,每个*.tld文件对应一个标签库,每个标签库可包含多个标签
TLD是Tab Library Definition的缩写,即标签库的定义。每个TLD文件对应一个标签库,一个标签库中包含多个标签。TLD文件也称为标签库定义文件。如下:
<taglib 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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<short-name>SimpleTagLibrary</short-name>
<uri>/SimpleTagLibrary</uri>
<tag>
<name>PageHeadTagThree</name>
<tagclass>ICT.tags.theme.PageHeadTagThree</tagclass>
<info>
</info>
<attribute>
<name>page</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>funmenuId</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
标签库定义文件的根元素是taglib,它可以包含多个tag子元素,每个tag子元素都定义一个标签。
taglib有三个子元素:1.tlib-version,指定该标签库实现的版本,这是一个作为标识的内部版本号,对程序没有太大的作用;2.short-name,该标签库的默认短名;3.uri,这个属性非常重要,它指定标签库的URI,JSP页面中使用标签库就是根据该URI属性来定位标签库的。
三、在JSP文件中使用自定义标签
在JSP页面中确定指定的标签需要几点:
1标签库URI,确定使用哪个标签库
2标签名:确定使用哪个标签
3导入标签库:使用taglib编译指令导入标签库,就是将标签库和指定前缀关联起来
4使用标签:在JSP页面中使用自定义标签。
<%@ taglib prefix="aof" uri="/WEB-INF/tld/aofsoft.tld"%>
<div style="height:1px">
<aof:PageHeadTagThree funmenuId="${funmenuId}" page="${page}"/>
</div>
在日积月累中,我们应该不断地封装实用的标签,这样能提高开发效率。