在JSP网页编程中,我们通常不满足于jstl或其他的框架,我们也可以自己写属于自己专用的标签。
在这里介绍一下表格中展示JavaBean的自定义标签的使用
第一步:写一个父标签,用来显示获取数据
新建一个ShowBeanTag.java
package com.wuyu.tags;
import java.io.IOException; import java.lang.reflect.Field; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class ShowBeanTag extends TagSupport { private static final long serialVersionUID = 1L; private String test; private Object object; @Override public int doStartTag() throws JspException { try { JspWriter out = this.pageContext.getOut(); out.println("<table>"); } catch (SecurityException e) { e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } return EVAL_BODY_INCLUDE; } @Override public int doEndTag() throws JspException { // TODO Auto-generated method stub JspWriter out = this.pageContext.getOut(); try { out.println("</table>"); } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; } public String getTest() { return test; } public void setTest(String test) { this.test = test; } public Object getObject() { return object; } public void setObject(Object object) { this.object = object; } }
第二步:编写DisplayColumnTag.java,子标签的类
package com.wuyu.tags; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.JspTag; import javax.servlet.jsp.tagext.TagSupport; public class DisplayColumnTag extends TagSupport { /** * */ private static final long serialVersionUID = 1L; private String property; private String showValue; @Override public int doStartTag() throws JspException { try { JspWriter out = this.pageContext.getOut(); JspTag parent = getParent(); ShowBeanTag sbt = (ShowBeanTag)parent; Object obj = sbt.getObject(); property = property.substring(0, 1).toUpperCase() + property.substring(1); Method getMethod = obj.getClass().getMethod("get" + property, new Class[] {}); out.println("<tr>"); if(showValue != null){ out.println("<td>"+ showValue +"</td>"); }else{ out.println("<td>"+ property +"</td>"); } out.println("<td>"+ getMethod.invoke(obj, new Object[]{}) +"</td>"); out.println("</tr>"); }catch(IOException e){ e.printStackTrace(); }catch(NoSuchMethodException e){ e.printStackTrace(); }catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } return EVAL_BODY_INCLUDE; } public String getProperty() { return property; } public void setProperty(String property) { this.property = property; } public String getShowValue() { return showValue; } public void setShowValue(String showValue) { this.showValue = showValue; } @Override public int doEndTag() throws JspException { // TODO Auto-generated method stub return EVAL_PAGE; } }
第三步:写tld文件
在WEB-INF文件夹下,新建一个文件ShowBeanTag.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> <short-name>b</short-name> <uri>/showBeanTag</uri> <tag> <name>showBeanTag</name> <tag-class>com.wuyu.tags.ShowBeanTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>displayColumnTag</name> <tag-class>com.wuyu.tags.DisplayColumnTag</tag-class> <body-content>empty</body-content> <attribute> <name>property</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>showValue</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
第四步:在web.xml中配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <jsp-config> <taglib> <taglib-uri>/showBeanTag</taglib-uri> <taglib-location>/WEB-INF/ShowBeanTag.tld</taglib-location> </taglib> </jsp-config> </web-app>
第五步:新建一个JavaBean User.java
package com.wuyu.bean; public class User { private String userName; private int age; private String email; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
第六步,在index.jsp中使用
<%@ page language="java" contentType="text/html; charset=UTF-8" import="com.wuyu.bean.User,java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/showBeanTag" prefix="b" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <% User user = new User(); user.setUserName("wuyu"); user.setAge(24); user.setEmail("512302907@qq.com"); pageContext.setAttribute("user", user); %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <b:showBeanTag test="user"> <b:displayColumnTag property="userName" showValue="用户名"/> <b:displayColumnTag property="age" showValue="年龄"/> </b:showBeanTag> </body> </html>