jsp 自定義標籤解決jsp頁面中int時間戳的時間格式化問題
之前在項目中根據需求,需要自定義標籤,經過查詢w3c文檔,自己也踩了一些坑,特此記錄自定義標籤的步驟,下面就以我之前的一個例子中的定義一個時間轉換標籤爲例:github地址
1. 在項目中src中建一個com.xiangmuming.tags包,裏面建一個類DateTag.java,內容爲:
此類的內容參考地址,在引入的時候也可以參考此文章在web.xml中配置一下標籤的路徑,這裏我沒有配置這個。
/** * 用於頁面 jstl時間格式化 */ public class DateTag extends TagSupport { private static final long serialVersionUID = 6464168398214506236L; private String value; public int doStartTag() throws JspException { String vv = "" + value; try { SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String s = dateformat.format(new Date(Long.valueOf(vv+"000"))); pageContext.getOut().write(s); } catch (Exception e) { e.printStackTrace(); } return super.doStartTag(); } public void setValue(String value) { this.value = value; } }
注:在編寫表現對應的實現類是,需要重載BodyTagSupporrt類的幾個方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag(); 參考地址 它們執行順序如下:doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag() doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY, 如果返回EVAL_BODY_INCLUDE則繼續執行; 如果返回SKIP_BODY則接下來的doInitBody(),setBodyContent(), doAfterBody()三個方法不會被執行, 而直接執行doEndTag()方法。 setBodyContent()方法用於設置標籤體內容,如果在此之前要作一些初始化工作,則在doInitBody()方法中完成。 標籤體內容執行完後,會調用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY,EVAL_PAGE或SKIP_PAGE。 如果返回EVAL_BODY_TAG則會再次設置標籤體內容,直到返回SKIP_BODY; 如果返回EVAL_PAGE則標籤體執行完後會繼續執行JSP頁面中接下來的部分; 如果返回SKIP_PAGE,則JSP頁面的後續內容將不再執行。
2. 在WEB-INF文件夾下建一個mytags.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/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version><!-- 代表標籤庫的版本號 --> <jsp-version>1.2</jsp-version><!-- 代表jsp的版本 --> <short-name>mt</short-name><!-- 你的標籤庫的簡稱 --> <uri>http://xiangmuming.com/mytags</uri><!-- 你標籤庫的引用uri --> <tag> <name>date</name><!-- 你定義的標籤的名稱 --> <tag-class>com.xiangmuming.tags.DateTag</tag-class><!-- 對應的標籤處理程序:包名+類名 --> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <!--<body-content>JSP</body-content> --><!-- 標籤體內容的格式 --> </tag> </taglib> 3. 在jsp頁面使用,頁面的所有內容如下: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> //引入自定義的標籤庫 <%@ taglib prefix="tmpl" uri="http://xinxianggov.com/mytags"%> <!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>Title</title> </head> <body> <tmpl:date value="${time }"></tmpl:date> </body> </html> //其中${ time }是一個int類型的時間戳的變量
關於jstl庫中的日期標籤的使用請參考 注:本文是結合網上的資料及自己的總結所得,如需轉載請註明http://www.cnblogs.com/zhuchenglin/p/8109787.html