首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts2 自訂下拉框 Tag 標籤開發指南

     編輯:Java 相關知識

在 Struts2 開發中,若需跨頁面重複使用相同的下拉選單(如性別、狀態等固定選項),最佳實踐是透過資料字典集中管理,再以自訂 Tag 標籤封裝輸出邏輯,方便後續維護。本文將完整示範如何從零建立一個自訂下拉框標籤,包含 Java 類實作、TLD 定義與 JSP 引用三大步驟。

核心實作步驟

  1. 編寫 Java 標籤類:繼承 TagSupport,覆寫 doEndTag() 輸出 HTML 選項。
  2. 定義 TLD 檔案:將標籤名稱對應至 Java 類,並宣告屬性(如 index 字段索引)。
  3. JSP 頁面引入:使用 <%@ taglib %> 導入 TLD,即可在頁面使用自訂標籤。

完整程式碼範例

1. 自訂 Tag 類

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class DictionaryOptionTag extends TagSupport {
    private static final long serialVersionUID = 1L;
    private String index; // 頁面傳入的字段索引

    @Override
    public int doEndTag() throws JspException {
        JspWriter out = pageContext.getOut();
        StringBuilder options = new StringBuilder();

        // 示範:依索引輸出不同選項,實務上應查詢資料庫或快取
        if ("SEX".equals(index)) {
            options.append("<option value=''>-請選擇-</option>");
            options.append("<option value='1'>男</option>");
            options.append("<option value='0'>女</option>");
        }
        try {
            out.println(options.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return EVAL_PAGE;
    }

    public String getIndex() { return index; }
    public void setIndex(String index) { this.index = index; }
}

2. TLD 定義檔

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  "https://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>tagSample</short-name>
  <uri>/hellotag</uri>
  <tag>
    <name>OptionDictionary</name>
    <tag-class>com.itmyhome.DictionaryOptionTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
      <name>index</name>
      <required>true</required>
      <rtexprvalue>false</rtexprvalue> <!-- true 時可用 ${} 表達式 -->
    </attribute>
  </tag>
</taglib>

3. JSP 使用範例

<%@ taglib uri="/WEB-INF/tld/platForm.tld" prefix="PF" %>
<select>
  <PF:OptionDictionary index="SEX" />
</select>

補充:Struts2 內建下拉標籤兩種寫法

寫法一:Map/List 搭配 listKey、listValue

<s:set name="selList" value="#{'1':'品質','2':'成本','3':'進度'}" />
<s:select list="#selList" listKey="key" listValue="value" 
       name="columnName" headerKey="0" headerValue="--請選擇--" />

寫法二:直接內嵌 List

<s:select name="columnName" list="{'品質','成本','進度'}" 
       headerKey="-1" headerValue="--請選擇--" emptyOption="true" multiple="false" />

自訂 Tag 適合「固定選項、多頁共用、需集中維護」的情境;Struts2 內建標籤則適合「動態資料、單頁使用」的場景。依專案需求靈活選擇,即可兼顧開發效率與維護性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved