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

Struts自定義標簽實戰:動態城區下拉選擇框

     編輯:Java 相關知識

展示一個完整的Struts 1.x自定義標簽DbSelectByDbWhere,從數據庫查詢城區數據並渲染<select>下拉框,支持指定表名、字段、條件、默認提示項與選中值。

標簽類核心代碼

繼承TagSupport,屬性對應TLD定義:table_name、id_col_name、select_id、name、name_col_name、condition、pleaseselect、sql_where。doStartTag()中:

  1. 獲取數據庫連接(ConnectionFactory)。
  2. 拼裝SQL:select * from table where 1=1 and city_id=sql_where。
  3. 遍歷ResultSet輸出<option>,匹配select_id添加selected屬性。
  4. finally關閉資源(DBclose工具類)。
public int doStartTag() throws JspException {
    // ... 參數預處理 ...
    con = ConnectionFactory.getConnection();
    if ("1".equals(pleaseselect)) pageContext.getOut().write("選擇城區");
    String sql = "select * from " + table_name + " where 1=1 ";
    if (!"".equals(sql_where)) sql += " and city_id=" + sql_where;
    ps = con.prepareStatement(sql);
    for (rs = ps.executeQuery(); rs.next(); ) {
        String selected = rs.getString(name_col_name).equals(select_id) ? "selected" : "";
        pageContext.getOut().write("<option value='" + rs.getString(id_col_name) + "' " + selected + ">" + rs.getString(name_col_name) + "</option>");
    }
    DBclose.close(rs, ps, con);
    return SKIP_BODY;
}

使用方式

  1. 在.tld註冊標簽名selectResnodes、屬性與標簽類全限定名。
  2. JSP引入<%@ taglib uri="/WEB-INF/xxx.tld" prefix="slotnode" %>。
  3. 頁面使用<slotnode:selectResnodes table_name="district" name_col_name="name" id_col_name="id" sql_where="${cityId}" select_id="${selectedDistrict}" pleaseselect="1" />。

缺點與改進建議

  • 標簽類直接持有Connection/PreparedStatement/ResultSet字段,非線程安全,併發環境下應改為局部變量。
  • SQL拼接存在注入風險,建議使用參數化查詢。
  • 邏輯與視圖耦合,後續可遷移至Struts 2標簽或JSTL<sql:query>+EL表達式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved