读书人

关于Struts2 lt;s:doubleselectgt;的用法,

发布时间: 2012-01-26 19:40:46 作者: rapoo

关于Struts2 <s:doubleselect>的用法
最近在写一个部门与人员的上下级联动,用了Struts2的doubleselect,代码成功执行,无报错,但不显示数据。代码如下:

Java code
//部门与员工的doubleselect  public Map<Department, List<User>> getDepUser() {      db=DBConnectionManager.getInstance();      con=db.getConnection("idb");      sql="select departmentcode,departmentname from tb_department order by departmentcode";      //ArrayList listDepUser=new ArrayList();      Map<Department,List<User>> mapDepUser=new HashMap<Department,List<User>>();      try {          ps=con.prepareStatement(sql);          rs=ps.executeQuery();          while(rs.next()){              Department department=new Department();              department.setDepartmentcode(rs.getString("departmentcode"));              department.setDepartmentname(rs.getString("departmentname"));              sql2="select userid,username from tb_user where departmentcode='"+rs.getString("departmentcode")+"'";              ps=con.prepareStatement(sql2);              rs1=ps.executeQuery();              List<User> uList=new ArrayList<User>();              while(rs1.next()) {                  //List<User> uList=new ArrayList<User>();                  User user=new User();                  user.setUserid(rs1.getString("userid"));                  user.setUsername(rs1.getString("username"));                  uList.add(user);                  //mapDepUser.put(department, uList);              }              mapDepUser.put(department, uList);          }      }catch(SQLException ex) {          ex.printStackTrace();      }finally {          freeCon();      }      //listDepUser.addAll(mapDepUser.values());      return mapDepUser;  }

Action里的代码如下:
Java code
private Map<Department, List<User>> coldepuser;public void setColdepuser(Map<Department, List<User>> coldepuser) {        this.coldepuser=coldepuser;    }public Map<Department, List<User>> getColdepuser() {        return coldepuser;    }//跳转到部门添加页面public String add() throws Exception {        //HttpServletRequest request=ServletActionContext.getRequest();        UserDao userdao=new UserDao();        //Map<Department,List<User>> mapDepUser=new HashMap<Department,List<User>>();        DepartmentDao departmentdao=new DepartmentDao();        Map<Department, List<User>> colDepUser=userdao.getDepUser();        Collection departmentcodeCol=departmentdao.getDepartmentCode();        setDepartmentcode(departmentcodeCol);        setColdepuser(colDepUser);        //request.setAttribute("mapDepUser", mapDepUser);        return "add";    }

JSP中的代码如下:
JScript code
<p> <label>上级主管:</label>            <s:doubleselect name="department.higherhead" list="coldepuser"               listKey="departmentcode" listValue="departmentname" doubleList="coldepuser[top]"               doubleName="userid" doubleListKey="userid" doubleListValue="username" theme="simple"             /></p>

此问题已经困扰小弟一天,望各位高手解决,不胜感激!

[解决办法]
list="coldepuser"不能拿到你那list的,你指向的是个map
关键就在于LZ用的是个Map,然后接下来的listKey,listValue,dobuleListKey的指向就
都存在问题.
建议LZ这样处理
Action里定义一个List和一个Map
List里寸上一级别的数据,Map则是你那样存
然后<s:dobuleselect的list指向你那list,listKey,listValue则不用说了.


doubleList则指向该Map即coldepuser中和list相关联的数据.
我粘贴个例子给LZ看看吧

[解决办法]
我从网上拿了个例子贴出来.LZ看看应该能得到一些启发

Java code
public class Area {             private Long id;       private String areaName;        // getter and setter   }
[解决办法]
没用过doubleselect

不过这种东西一般不显示的话就debug一定会找的到

或者用喷的,看看页面上接到的list里面有值没值

然后就是详细的对比 字段大小写什么的有没有写错
[解决办法]
学习 学习
[解决办法]
我记得我在学这个标签的时候有一句注释说到 <s:doubleselect >标签必须嵌套在<s:form>中
我把以前写的例子发给你看看,只是个JPS的代码,这个是可以运行的,希望能有帮助。
<%


DeptInfo d1=new DeptInfo("D001","销售部");
DeptInfo d2=new DeptInfo("D002","财务部");
EmpInfo e1=new EmpInfo("E001","张三");
EmpInfo e2=new EmpInfo("E002","李四");
EmpInfo e3=new EmpInfo("E003","王五");
EmpInfo e4=new EmpInfo("E004","赵六");
d1.getEmpset().add(e1);
d1.getEmpset().add(e2);

d2.getEmpset().add(e3);
d2.getEmpset().add(e4);

Map map=new HashMap();
map.put(d1,d1.getEmpset());
map.put(d2,d2.getEmpset());

request.setAttribute("map",map);

%>
<s:form action="double"> //<s:doubleselect >标签必须嵌套在<s:form>中
级联下拉框:<hr/>
<s:doubleselect
cssStyle="width:130px"
list="#request.map.keySet()" //keySet代表Map的键的集合,即d1,d2部门实例
listKey="deptId"
listValue="deptName"
name="deptId"
doubleCssStyle="width:130px"
doubleList="#request.map[top]"
doubleListKey="empId"
doubleListValue="empName"

doubleName="empId">
</s:doubleselect>
<hr/>
<s:submit value="提交"></s:submit>
</s:form>
[解决办法]
对应的action中要有get方法才行
[解决办法]
学习。。。。
[解决办法]
我楼上这个帮顶男子,到哪里都能看到你,原来你的分数是这样来的.....
[解决办法]
while(rs1.next()) {
.....
}

后台 Action 中 ,打印 User中的信息看看,是否有值 。。。。
[解决办法]
我不懂得struts的这个标签,但是,楼主好有钱的,我是穷人,帮你顶顶,给我一点分吧。
[解决办法]
我觉得4楼有道理。
探讨
list="coldepuser"不能拿到你那list的,你指向的是个map
关键就在于LZ用的是个Map,然后接下来的listKey,listValue,dobuleListKey的指向就
都存在问题.
建议LZ这样处理
Action里定义一个List和一个Map
List里寸上一级别的数据,Map则是你那样存
然后<s:dobuleselect的list指向你那list,listK……

[解决办法]
正在学习中……
[解决办法]
探讨
我觉得4楼有道理。

引用:
list="coldepuser"不能拿到你那list的,你指向的是个map
关键就在于LZ用的是个Map,然后接下来的listKey,listValue,dobuleListKey的指向就
都存在问题.
建议LZ这样处理
Action里定义一个List和一个Map
List里寸上一级别的数据,Map则是你那样存……



[解决办法]
探讨

while(rs1.next()) {
.....
}

后台 Action 中 ,打印 User中的信息看看,是否有值 。。。。

[解决办法]
没有过
但帮楼主顶了

读书人网 >Java Web开发

热点推荐