Java - 自定义标签

自定义标签在项目中非常有用,使用起来也非常简单,下面就看看创建及使用过程吧。

一、创建一个类并继承BodyTagSupport
package com.main.movie.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

/**
 * 分页标签
 * @author main
 *
 */
@SuppressWarnings("serial")
public class UIPageTag extends BodyTagSupport {
	private int page;
	
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}

	public int doStartTag() throws JspException {
		StringBuffer html = new StringBuffer();
		html.append("<a href='#' onclick='Tabs.changePage(\"admin/admin_adminManager?page=" + (page+1) + "\")'>下一页</a>");
		try {
			System.out.println(html.toString());
			pageContext.getOut().print(html.toString());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return EVAL_PAGE;
	}
	
}


二、在WEB-INF文件夹下创建一个tlds文件夹并创建tld文件(后缀是.tld,格式其实是xml的)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                        "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
 <tlib-version>1.0</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>movie-admin</short-name>
  <tag>
 	<name>uiPage</name>
 	<tag-class>com.main.movie.tag.UIPageTag</tag-class>
 	<attribute>
 		<name>page</name>
 		<required>true</required>
 	</attribute>
 </tag>
</taglib>


三、配置web.xml
<jsp-config>
	<taglib>
		<taglib-uri>/movie-admin</taglib-uri>
		<taglib-location>/WEB-INF/tlds/movie-admin.tld</taglib-location>
	</taglib>
</jsp-config>


四、在JSP界面中引入标签
<%@ taglib uri="/WEB-INF/tlds/movie-admin.tld" prefix="family" %>


五、让标签支持EL表达式
修改需要支持EL表达式的属性的Setter方法如:
public void setValue(Object value)throws JspException {
  this.value = ExpressionEvaluatorManager.evaluate(
            "value", value.toString(), Object.class, this, pageContext);  
 }

属性说明:
第一个表示tag的名字,在取el表达式出错时使用。一般和属性名字相同。
第二个要求字符串,通常简单调用输入对象的toString方法。
第三个是类,通常用Object.class。
第四个用this即可,
第五个是pageContext变量。

注意:
1、tld文件中该标签属性的rtexprvalue得设置为true。
2、顺便检查一下JSTL所需的包在不在。

你可能感兴趣的:(java,jsp,xml,Web,servlet)