struts2 doubleselect标签用法示例

来源:互联网 发布:韩国网络短剧迷你剧 编辑:程序博客网 时间:2024/05/16 09:58

转载自:http://blog.csdn.net/security08/archive/2009/09/24/4586899.aspx

 

Struts2提供了级联下拉选择框doubleselect标签,这对简化诸如省份/城市这样的典型需求的操作是大有好处的,本例是生成“部门->员工”的级联菜单。

第一步:本例用到的类的介绍:

    部门类:SysDepartment

view plaincopy to clipboardprint?
  1. public class SysDepartment{  
  2.  private Integer dptId;//部门id   
  3.  private String dptName;//部门名称   
  4. //getter,setter方法   
  5. }  

员工类:ErmEmployee

view plaincopy to clipboardprint?
  1. public class ErmEmployee{  
  2.  private Integer eplId;//员工id  
  3.  private String userName;//员工名称  
  4. //getter,setter方法  
  5. }  

注:这里为了演示方便,部门和员工的关系表就不列出了,同时将java代码嵌入到jsp页面中。

第二步:生成部门和员工

以下是在jsp中生成部门和员工的代码字段:

view plaincopy to clipboardprint?
  1. <%  
  2. Map<SysDepartment, List<ErmEmployee>> map = new HashMap<SysDepartment, List<ErmEmployee>>();//map集合,key映射部门,value映射该部门下的员工  
  3.         SysDepartment d1=new SysDepartment();  
  4.         d1.setDptId(1);  
  5.         d1.setDptName("销售一部");  
  6.         SysDepartment d2=new SysDepartment();  
  7.         d2.setDptId(2);  
  8.         d2.setDptName("网络一部");  
  9.         SysDepartment d3=new SysDepartment();  
  10.         d3.setDptId(3);  
  11.         d3.setDptName("IT中心");  
  12.         List<ErmEmployee> elist1=new ArrayList<ErmEmployee>();//用list保存一个部门的所有员工  
  13.         ErmEmployee e1=new ErmEmployee();  
  14.         e1.setEplId(1);  
  15.         e1.setUserName("张三");  
  16.         ErmEmployee e2=new ErmEmployee();  
  17.         e2.setEplId(2);  
  18.         e2.setUserName("李四");  
  19.         ErmEmployee e9=new ErmEmployee();  
  20.         e9.setEplId(9);  
  21.         e9.setUserName("巩利");  
  22.         ErmEmployee e10=new ErmEmployee();  
  23.         e10.setEplId(10);  
  24.         e10.setUserName("赵薇");  
  25.         ErmEmployee e11=new ErmEmployee();  
  26.         e11.setEplId(11);  
  27.         e11.setUserName("刘德华");  
  28.         elist1.add(e1);  
  29.         elist1.add(e2);  
  30.         elist1.add(e9);  
  31.         elist1.add(e10);  
  32.         elist1.add(e11);  
  33.         List<ErmEmployee> elist2=new ArrayList<ErmEmployee>();  
  34.         ErmEmployee e3=new ErmEmployee();  
  35.         e3.setEplId(3);  
  36.         e3.setUserName("王五");  
  37.         ErmEmployee e4=new ErmEmployee();  
  38.         e4.setEplId(4);  
  39.         e4.setUserName("刘六");  
  40.         ErmEmployee e5=new ErmEmployee();  
  41.         e5.setEplId(5);  
  42.         e5.setUserName("吴邦国");  
  43.         elist2.add(e3);  
  44.         elist2.add(e4);  
  45.         elist2.add(e5);  
  46.           
  47.         List<ErmEmployee> elist3=new ArrayList<ErmEmployee>();  
  48.         ErmEmployee e6=new ErmEmployee();  
  49.         e6.setEplId(6);  
  50.         e6.setUserName("张学友");  
  51.         ErmEmployee e7=new ErmEmployee();  
  52.         e7.setEplId(7);  
  53.         e7.setUserName("关芝琳");  
  54.         ErmEmployee e8=new ErmEmployee();  
  55.         e8.setEplId(8);  
  56.         e8.setUserName("吴京");  
  57.         elist3.add(e6);  
  58.         elist3.add(e7);  
  59.         elist3.add(e8);  
  60.           
  61. //在map中保存部门和对应的员工  
  62.         map.put(d1,elist1);  
  63.         map.put(d2,elist2);  
  64.         map.put(d3,elist3);  
  65. //将map放到request范围  
  66.         request.setAttribute("map", map);  
  67. %>  

第三步:在jsp页面插入struts2 doubleselect标签:

 

view plaincopy to clipboardprint?
  1. <s:form action="doubleSelectPost" name="form1">  
  2.             <s:doubleselect   
  3.                 formName="form1"   
  4.                 label="业务员"  
  5.                 list="#request.map.keySet()"  
  6.                 name="dptId"  
  7.                 id="comboId"  
  8.                 listKey="dptId"  
  9.                 listValue="dptName"   
  10.                 doubleName="eplId"  
  11.                 doubleId="comboDoubleId"  
  12.                 doubleList="#request.map[top]"  
  13.                 doubleListKey="eplId"  
  14.                 doubleListValue="userName"  />     
  15.         </s:form>  

 

说明:

  • formName:对应的表单名称。
  • label:该级联下拉列表的标签。
  • name:第一个下拉列表的名称。name="dptId"指明了第一个下拉列表名称为dptId。
  • id:第一个下拉列表的id名称。
  • list:指定用于输出第一个下拉列表框中选项的集合。本示例 list="#request.map.keySet()" 是将map的键(即部门)作为第一个下拉列表选项。
  • listKey:指定集合元素中的某个属性作为第一个下拉列表框的value。listKey="dptId"是将部门id作为第一个下拉列表的值,在提交该表单时,参数名就是depId,值为listKey的值。如“dptId=1”
  • listValue:指定集合元素中的某个属性作为第一个下拉框的标签。listValue="dptName" 用部门名称作为标签,即下拉列表显示出来的值。
  • doubleName:第二个下拉列表的名称。
  • doubleId:第二个下拉列表的id名称。
  • doubleList:指定用于输出第二个下拉列表框中选项的集合。本示例 #request.map[top] 是将map的值(即员工)作为第二个下拉列表选项。
  • doubleListKey:指定集合元素中的某个属性作为第二个下拉列表框的value。doubleListKey="eplId"是将员工id作为第二个下拉列表的值。
  • doubleListValue:指定集合元素中的某个属性作为第二个下拉框的标签。doubleListValue="userName" 用员工名称作为标签。

到此,基本代码已经完成。执行该页面,得到如下页面:

分行的下拉列表

可以看到,生成出来的级联下拉列表是分行的,如果不需要分行,可以怎么做呢?

以下介绍一个简单的方法,就是在<s:form>标签外包含标签:

view plaincopy to clipboardprint?
  1. <div class="doubleselect"><s:form>。。。</s:form></div>  

然后加入css样式:

view plaincopy to clipboardprint?
  1. <STYLE type="text/css">  
  2.                 .doubleselect br{  
  3.                     display:none;  
  4.                 }  
  5.             </STYLE>  

修改后,即可实现级联列表框在同一行显示了。效果如下:

未分行的级联下拉框

原创粉丝点击