2020 年 6 月 3 日

IT Skills 波林

Polin WEI – 資訊工作者的技術手札

Java Customize Tag – 客製 Java Tag 標籤程式範例

1 min read
溪頭

Java Customize Tag – 客製 Java Tag 標籤程式範例

上一篇 Java Taglib 自訂標籤簡介 大致介紹了 Tag 自訂標籤 的方便性, 及如何使用, 現在就來看如何撰寫 Taglib 客製標籤 及 如何在 JSP 網頁上, 使用自己撰寫的 Tag 標籤。

 

  1. 撰寫 Tag 的 Java 程式檔: jsDemoTag.java
  2. 建立標籤程式庫描述元 demo.tld , 並放在 WEB-INF 目錄下
  3. 建立 JSP 網頁 HelloTag.jsp 來測試

 

 

  • 撰寫 Tag 的 Java 程式檔: jsDemoTag.java
package com.demos.tag;

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

public class jsDemoTag extends BodyTagSupport {

    
    @Override
    public int doEndTag() throws JspException {
        // TODO Auto-generated method stub
        try {
            StringBuffer sb = new StringBuffer();
            // 利用 pageContext Object 取得 JSP 網頁輸出資料流 .getOut() , 才能將產生的 Java Script 寫到客戶端
            JspWriter out = pageContext.getOut();

            // 利用 BodyContent Objext 及 getBodyContent() 函式取得資料
            BodyContent bodyContent = getBodyContent();

            if( bodyContent!=null ){
                String bodyMessage = bodyContent.getString();
                sb.append("<script language=\"javascript\"> \n  \n");
                sb.append("alert('"+ bodyMessage.trim() +"');");
                sb.append("  \n</script> \n");
                
                // 將資料寫回客戶端
                out.write(sb.toString());               
            }
            
        } catch (Exception e) {
            // TODO: handle exception
            System.err.print(e);
        }
        return EVAL_PAGE;
    }    
}

 

  • 建立標籤程式庫描述元 demo.tld , 並放在 WEB-INF 目錄下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_1.dtd" >
<taglib>
  <tlibversion>1.0</tlibversion>
  <jspversion>1.1</jspversion>
  <shortname>demo</shortname>  
  <info>Demo Customization Tag </info>
  <tag>
    <name>message</name>
    <tagclass>com.demos.tag.jsDemoTag</tagclass>
    <info>Display Alert Box</info>
  </tag>
</taglib>

tld 檔中, 在 <attribute> </attribute> 中可設定 name, required, rtexprvalue 等三個屬性條件,<required>用來指定屬性是否一定要使用,若設定為 true,則一定要使用指定的屬性,設定為 false 表示屬性為可選的(optional),<rtexprvalue>用來表示屬性指定時,是否可以使用表示式等動態屬性,例如 EL ${param.who} 這樣的指定,如果設定為true表示可以,設定為false表示必須為靜態屬性。

 

  • 建立 JSP 網頁 HelloTag.jsp 來測試
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="myTag"  uri="/WEB-INF/demo.tld"%>

<!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>Demo Customization Tag Library</title>
   </head>
   <body>
      <myTag:message>Hello Tag !! This is first Tag Library</myTag:message>
   </body>
</html>

 

這樣在寫 Java Tag , 導入 java script 時是比較麻煩,因為在特殊字元必須要在前面加入 斜線 “\” 來抑制,而使用 FreeMarker 來撰寫 Java Tag 則是比較簡單而且方便,可以參考Spring Boot 使用 Freemarker 開發 Java Tag 客製標籤 的作法。

Copyright © All rights reserved. | Newsphere by AF themes.