BloggerAds

2009年4月1日 星期三

[JAVA] Tag 自訂標籤第一支程式

From: Polin Wei

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

Step1: 撰寫 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;
    }   
}



Step2: 建立標籤程式庫描述元 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表示必須為靜態屬性。


Step3: 建立 JSP 網頁 HelloTag.jsp 來測試
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="uDemo"  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>
<uDemo:message>Hello Tag !! This is first Tag Library</uDemo:message>
</body>
</html>

沒有留言:

張貼留言