jsp 自定義標籤解決jsp頁面中int時間戳的時間格式化問題

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章