運行環境:myeclipse8.6+jboss5.1+jvm1.6 先看最後目錄結構: 直接上源碼: complexFormTag.jsp: [html] <%@ page language="java" contentType="text/html; charset=gb2312"pageEncoding="gb2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>復雜表單標簽使用范例</title> <s:head /> </head> <body> <h3 align="left">doubleselect標簽使用范例</h3> <p> <s:form name="doubleselectExample"> <s:doubleselect label="材料" headerValue="" headerKey="0" list="itemList" listKey="itemId" listValue="item" doubleName="materialId" doubleList="materialMap.get(top.itemId)" doubleListKey="materialId" doubleListValue="material" /> </s:form> </p> </body> </html> 解析: 若不使用Struts2,則需要結合JavaScript和HTML標簽共同開發完成此功能。 doubleselect標簽的功能是提供兩個有級聯關系的下拉框。用戶選中第一個下拉框中的某選項,則第二個下拉框中的選項根據第一個下拉框被選中的某選項內容來決定它自己的下拉框選項內容,產生聯動效果。 下面是doubleselect標簽的屬性列表: 名稱 必 需 默認 類型 描述 list 是 無 Cellection Map Enumeration Iterator array 要迭代的集合,使用集合中的元素來設置各個選項,如果list的屬性為Map則Map的key成為選項的value,Map的value會成為選項的內容 listKey 否 無 String 指定集合對象中的哪個屬性作為選項的value,該選項只對第一個列表框起作用 listValue 否 無 String 指定集合對象中的哪個屬性作為選項的內容,該選項只對第一個列表框起作用 headerKey 否 無 String 設置當用戶選擇了header選項時,提交的的value,如果使用該屬性,不能為該屬性設置空值 headerValue 否 無 String 顯示在頁面中header選項內容 emptyOption 否 false Boolean multiple 否 false Boolean 是否多選 size 否 無 Integer 顯示的選項個數,該選項只對第一個列表框起作用 doubleId 否 無 String 指定第二個列表框的ID doubleList 是 無 Cellection Map Enumeration Iterator array 要迭代的集合 doubleListKey 否 無 String 指定集合對象中的哪個屬性作為選項的value,該選項只對第二個列表框起作用 doubleListValue 否 無 String 指定集合對象中的哪個屬性作為選項的內容,該選項只對第二個列表框起作用 doubleSize 否 無 Integer 選項個數 doubleName 否 無 String 指定第二個列表框的name映射 doubleValue 否 無 Object 第二個列表框的初始選種項 對於代碼"materialMap.get(top.itemId)",其中的top返回的是材料類別map集合的value即材料list集合中的材料類對象實例。 注意:<s:doubleselect/>標簽必須放在<s:form>中,放在普通<form>中會出錯,而且s:form必須指定name屬性。 另外,希望頁面美觀的話,希望s:doubleselect標簽和左邊的字對齊,則指定s:doubleselect屬性theme="simple" 希望兩個select排成一行(默認是上下行的),則在<s:form></s:form>間加入css樣式: <style> .nobr br{display:none} </style> 然後在用<div class="nobr"></div>把<s:doubleselect .. />包起來就可以了! 下面通過一張圖形象的表示聯動關系: 對應的組件: 最後,兩個下拉框要聯動起來,靠的是“ItemId”與下面"Integer類型變量"的一一對應關系。 complexFormTagAction.java: [java] package action; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.opensymphony.xwork2.ActionSupport; import model.*; public class ComplexFormTagAction extends ActionSupport { //級聯第一個下拉框數據 private List<Item> itemList; //級聯第二個下拉框數據 private Map<Integer, List<Material>> materialMap; public String execute() throws Exception { itemList = new ArrayList<Item>(); //循環新建10個類別 for (int j = 0; j < 10; j++) { Item item = new Item(); item.setItemId(j + 1); item.setItem("類別" + (j + 1)); itemList.add(item); } materialMap = new HashMap<Integer, List<Material>>(); //循環新建每個類別中的10個材料 for (int j = 0; j < 10; j++) { List<Material> materialList = new ArrayList<Material>(); for (int i = 0; i < 10; i++) { Material material = new Material(); material.setMaterialId(i); material.setMaterial("類別" + (j + 1)+"-->"+"材料"+(i + 1)); materialList.add(material); } materialMap.put((j + 1), materialList); } return SUCCESS; } public Map<Integer, List<Material>> getMaterialMap() { return materialMap; } public void setMaterialMap(Map<Integer, List<Material>> materialMap) { this.materialMap = materialMap; } public List<Item> getItemList() { return itemList; } public void setItemList(List<Item> itemList) { this.itemList = itemList; } } Material.java: [java] package model; public class Material implements java.io.Serializable { // Fields private int materialId; private String material; public Material() {} public int getMaterialId() { return this.materialId; } public void setMaterialId(int materialId) { this.materialId = materialId; } public String getMaterial() { return this.material; } public void setMaterial(String material) { this.material = material; } } Item.java: [java] package model; public class Item implements java.io.Serializable { private int itemId; private String item; public Item() {} public int getItemId() { return itemId; } public void setItemId(int itemId) { this.itemId = itemId; } public String getItem() { return this.item; } public void setItem(String item) { this.item = item; } } struts.xml: [html] <?xml version="1.0" encoding="gb2312"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.i18n.encoding" value="gb2312"/> <package name="OGNLTAG" extends="struts-default"> <action name="complexFormTag" class="action.ComplexFormTagAction"> <result name="success">/jsp/complexFormTag.jsp</result> </action> </package> </struts>