Struts2提供了级联下拉选择框doubleselect标签,这对简化诸如省份/城市这样的典型需求的操作是大有好处的 ,本例是生成“部门->员工”的级联菜单。
第一步:本例用到的类的介绍:
部门类:SysDepartment
public class SysDepartment{ private Integer dptId;//部门id private String dptName;//部门名称 //getter,setter方法 }
员工类:ErmEmployee
public class ErmEmployee{ private Integer eplId;//员工id private String userName;//员工名称 //getter,setter方法 }
注:这里为了演示方便,部门和员工的关系表就不列出了,同时将java代码嵌入到jsp页面中。
第二步:生成部门和员工
以下是在jsp中生成部门和员工的代码字段:
<% Map<SysDepartment, List<ErmEmployee>> map = new HashMap<SysDepartment, List<ErmEmployee>>();//map集合,key映射部门,value映射该部门下的员工 SysDepartment d1=new SysDepartment(); d1.setDptId(1); d1.setDptName("销售一部"); SysDepartment d2=new SysDepartment(); d2.setDptId(2); d2.setDptName("网络一部"); SysDepartment d3=new SysDepartment(); d3.setDptId(3); d3.setDptName("IT中心"); List<ErmEmployee> elist1=new ArrayList<ErmEmployee>();//用list保存一个部门的所有员工 ErmEmployee e1=new ErmEmployee(); e1.setEplId(1); e1.setUserName("张三"); ErmEmployee e2=new ErmEmployee(); e2.setEplId(2); e2.setUserName("李四"); ErmEmployee e9=new ErmEmployee(); e9.setEplId(9); e9.setUserName("巩利"); ErmEmployee e10=new ErmEmployee(); e10.setEplId(10); e10.setUserName("赵薇"); ErmEmployee e11=new ErmEmployee(); e11.setEplId(11); e11.setUserName("刘德华"); elist1.add(e1); elist1.add(e2); elist1.add(e9); elist1.add(e10); elist1.add(e11); List<ErmEmployee> elist2=new ArrayList<ErmEmployee>(); ErmEmployee e3=new ErmEmployee(); e3.setEplId(3); e3.setUserName("王五"); ErmEmployee e4=new ErmEmployee(); e4.setEplId(4); e4.setUserName("刘六"); ErmEmployee e5=new ErmEmployee(); e5.setEplId(5); e5.setUserName("吴邦国"); elist2.add(e3); elist2.add(e4); elist2.add(e5); List<ErmEmployee> elist3=new ArrayList<ErmEmployee>(); ErmEmployee e6=new ErmEmployee(); e6.setEplId(6); e6.setUserName("张学友"); ErmEmployee e7=new ErmEmployee(); e7.setEplId(7); e7.setUserName("关芝琳"); ErmEmployee e8=new ErmEmployee(); e8.setEplId(8); e8.setUserName("吴京"); elist3.add(e6); elist3.add(e7); elist3.add(e8); //在map中保存部门和对应的员工 map.put(d1,elist1); map.put(d2,elist2); map.put(d3,elist3); //将map放到request范围 request.setAttribute("map", map); %>
第三步:在jsp页面插入struts2 doubleselect标签:
<s:form action="doubleSelectPost" name="form1"> <s:doubleselect formName="form1" label="业务员" list="#request.map.keySet()" name="dptId" id="comboId" listKey="dptId" listValue="dptName" doubleName="eplId" doubleId="comboDoubleId" doubleList="#request.map[top]" doubleListKey="eplId" doubleListValue="userName" /> </s:form>
说明:
到此,基本代码已经完成。执行该页面,得到如下页面:
可以看到,生成出来的级联下拉列表是分行的,如果不需要分行,可以怎么做呢?
以下介绍一个简单的方法,就是在<s:form>标签外包含标签:
<div class="doubleselect"><s:form>。。。</s:form></div>
然后加入css样式:
<STYLE type="text/css"> .doubleselect br{ display:none; } </STYLE>
修改后,即可实现级联列表框在同一行显示了。效果如下: