Jsp自定义标签:
1.继承SimpleTagSupport,重写doTag()。
2.在WEB-INF/ 下配置**.tld文件
3.Jsp页面引入自定义标签:<%@ taglib uri="***" prefix="s"%>
自定义标签demo实现:在jsp页面将对象存入pageContext.setAttribute(),使用标签输出该对象的所有方法,成员变量及值。
TestTag.java:
package mytag; import java.io.IOException; import java.io.Writer; import java.lang.reflect.Field; import java.lang.reflect.Method; import javax.servlet.jsp.tagext.SimpleTagSupport; public class TestTag extends SimpleTagSupport{ private String obj;//带属性标签必须为每个属性提供对应的 setter 和 getter 方法 public String getObj() { return obj; } public void setObj(String obj) { this.obj = obj; } public void doTag() throws IOException{ Writer out = getJspContext().getOut(); Object object=(Object)getJspContext().getAttribute(obj); Class<?> c=object.getClass(); Field fields[]=c.getDeclaredFields(); for(Field f:fields ){ f.setAccessible(true);//私有成员也能访问 try { out.write(f.getName()+":"+f.get(object)+"</br>"); } catch (IllegalArgumentException | IllegalAccessException e) { e.printStackTrace(); } } Method methods[]=c.getMethods(); for(Method m:methods){ out.write(m.toString()+"</br>"); } } }
mytaglib.tld:
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>mytaglib</short-name> <uri>/mytaglib</uri> <tag> <!-- 定义标签名 --> <name>info</name> <!-- 定义标签处理类 --> <tag-class>mytag.TestTag</tag-class> <!-- 定义标签体为空 --> <body-content>empty</body-content> <!-- 配置标签属性:driver --> <attribute> <name>obj</name> <required>true</required> <fragment>true</fragment> </attribute> </tag> </taglib>
test.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="mytag.User,java.util.*" %> <%@ taglib uri="/mytaglib" prefix="s" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% pageContext.setAttribute("date", new Date()); %> <b><s:hello/></b> <b><s:info obj="date"/></b> </body> </html
时间: 2024-10-09 05:08:47