欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Struts2 级联下拉框 详解析

程序员文章站 2022-05-01 18:37:49
运行环境:myeclipse8.6+jboss5.1+jvm1.6   先看最后目录结构:     直接上源码:   co...
运行环境:myeclipse8.6+jboss5.1+jvm1.6

 

先看最后目录结构:

 

Struts2 级联下拉框 详解析

 

直接上源码

 

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>

 

然后在用<p class="nobr"></p>把<s:doubleselect .. />包起来就可以了!

 

 下面通过一张图形象的表示联动关系:

 

Struts2 级联下拉框 详解析

 

对应的组件:                                                                                

 

 

 

最后,两个下拉框要联动起来,靠的是“ItemId”与下面"Integer类型变量"的一一对应关系。

Struts2 级联下拉框 详解析

 

 

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>