早先时候已经有一篇写到struts的iterator标签去遍历些基本的集合数据了,比如单个对象的List啊,多个对象的List啊,map等等。最近呢又遇见两种情况,在这里给记录一下,方便自己以后能随时查看,也希望能在一定程度上帮助到大家。
第一种情况是,这里首先有两个表,一个表是客户表(CustomerInfo),一个表是收货人表(TakerInfo),两个表中,都有姓名(name)和电话(cellphone)的属性,根据页面输入的一系列条件,如name,cellphone等去查询两表,得到一个存放着customerinfo和takerinfo的集合。并将这个集合绑定到页面,并标示出,这个人是来自于客户表,还是来自于收货人表。
action代码如下:
private Map<String, List>map; /包含客户和取货人的map集合 private List<TakerInfo>list; //取货人list private List<CustomerInfo> list2; //客户list public String getAllUserLs(){ map=new HashMap<String, List>(); list=takerInfoDao.getAllTakers(); //dao层实现省略,此处不是重点 list2=customerInfoDao.getAllCus(); if(list.size()>0&&list2.size()>0) map.add("takers",list); map.add("customers",list2); return SUCCESS; }
绑定该map的页面代码如下:
<s:iterator value="map3" var="var"> <s:if test="#var.key=='takers'"> <s:iterator value="#var.value" var="takerInfo"> <tr> <td >真实姓名:<s:property value="#takerInfo.RealName"/></td> <td >手机号码:<s:property value="#takerInfo.Cellphone"/></td> </tr> </s:iterator> </s:if><s:else> <s:iterator value="#var.value" var="customerInfo"> <tr> <td >真实姓名:<s:property value="#customerInfo.customerRealName"/></td> <td >手机号码:<s:property value="#customerInfo.customerCellphone"/></td> </tr> </s:iterator> </s:else> </s:iterator>
上面页面和代码我都尽量写得最清楚直白了,方便大家理解,很多方法的实现或者页面上的其他字段,样式,js我都抹掉了。
第二种情况是,有一个得到所有城市的接口[返回的值里存有城市名称和城市的id等信息],有一个根据单个城市id得到这个城市下,所有车辆品牌的接口[返回的值里,存有一个城市下的所有车辆的品牌id,品牌名称等信息]。
这里需要实现就是,在一个页面上,显示出所有车辆品牌名称,并显示它是属于哪个城市下的,如有是上海有10个车辆品牌,武汉有10个车辆品牌,你得显示这20辆车的详细,并指出它是哪个城市下的。
action的代码如下:
private List<Map<String, Object>> brandsMapList; //一个城市下所有品牌的map private List<Map<String, Object>> regionMapList; //所有城市map,以此获得所有的城市的id private Map<String, List<Map<String, Object>>> allBrandMap; //所有城市的,所有品牌map public String showAllBrand(){ //实例化 allBrandMap=new HashMap<String, List<Map<String,Object>>>(); //得到所有城市 regionMapList=Dom4jUtil.parserXmlStr(carBrandService.getCitys()); for(int i=0;i<regionMapList.size();i++){ //得到单个城市下的所有brand brandsMapList=Dom4jUtil.parserXmlStr(carBrandService.getSelfDriveServiceCityBrands(regionMapList.get(i).get("id").toString())); //所有城市下的,所有brand allBrandMap.put(regionMapList.get(i).get("name").toString(), brandsMapList); } }
绑定该集合的jsp页面是:
<s:iterator value="allBrandMap" status="index" var="citys"> <s:if test="#citys.value!=null"> <s:iterator value="#citys.value" var="brand"> <tr> <td ><s:property value="#brand.name"/></td> <td ><s:property value="#citys.key"/> </td> <td >[查看][删除]</td> </tr> </s:iterator> </s:if> </s:iterator>