楼主说的是多表查询??要不你专门写个View视图,其中包括你耍显示的所有属性就可以了,不过就是有点麻烦

解决方案 »

  1.   

    可以说是多表,主要是主表和从表,怎么样在STRUTS里显示出来呢?
      

  2.   

    专门写个VIEW?不明白.是自定义TAG吗?
      

  3.   

    还有个问题,1.在ACTION里遍历好返回一个LIST呢,然后在JSP直接遍历?
    2.还是在ACTION里返回两个主从的LIST,然后在JSP循环遍历呢?希望大侠们多多指教啊.........
      

  4.   

    不论主从表还是多表查询,其结果均可用一个简单的javabean来表示,即一个View,举个例子
    主表中有
    corpID(公司ID),corpname(公司名),corpaddress(公司地址)...
    从表
    employeeID(员工ID),corpID(公司ID),empname(员工姓名)...
    那么你可以建一个这样的VIEW 
    public class EmployeeView implements Serializable{
        private int CORPID;           
        private int EMPLOYEEID;
        private String CORPNAME;
        private String CORPADDRESS;
        private String EMPNAME;       
    //然后是一大串的get() set() 方法啦
    }   
    然后在取数据时
    //...
    ArrayList list = new ArrayList();
    while(rs.next()){
       EmployeeView view = new EmployeeView();
       view.setCORPID(rs.getInt("CORPID"));
    //...
    //View  数据set 完以后别忘了加到ArrayList中去
    list.add(view);
    }
    return list;//返回的就是一个包含所有View的ArrayList了,数据就随便你怎么用啦
      

  5.   

    我觉得用二维列表还可以,但在JSP里却不知道怎么写了: public List getList() {
    mainlist = getProductClass1Service().getClass1AllList();
    for (int i = 0; i < mainlist.size(); i++) {
    list2 = new ArrayList();
    pc1 = (ProductClass1) mainlist.get(i);
    list2.add(pc1);
    sublist = getProductClass2Service().getClass1IDList(pc1.getClass1No());
    System.out.println("sublist测试数据:"+sublist.size());
    list3 = new ArrayList();
    for (int j = 0; j < sublist.size(); j++) {
    list3.add((ProductClass2) sublist.get(j));
    }
    list2.add(list3);
    list1.add(list2);
    }
    return list1;
    } public static void main(String[] args) {
    ProductClass1 pc1;
    ProductClass2 pc2;
    TestClassManages tc = new TestClassManages();
    List list = tc.getList();
    List list1;
    List sublist;
    System.out.println("测试数据:"+list);
    for (int i = 0; i < list.size(); i++) {
    list1=(List)list.get(i);
    pc1 = (ProductClass1) list1.get(0);
    System.out.println("编号:" + pc1.getClass1No());
    System.out.println("名称:" + pc1.getClass1Name());
    System.out.println("注释:" + pc1.getClass1Description());
    System.out.println("关键:" + pc1.getClass1Keywords());
    System.out.println("点击:" + pc1.getClass1Click());
    System.out.println("相关:" + pc1.getClass1Interfix());
    System.out.println("===================下属类=================");
    sublist = (List) list1.get(1); for (int j = 0; j < sublist.size(); j++) {
    pc2 = (ProductClass2) sublist.get(j);
    System.out.println("大号:" + pc2.getClass1No());
    System.out.println("编号:" + pc2.getClass2No());
    System.out.println("名称:" + pc2.getClass2Name());
    System.out.println("注释:" + pc2.getClass2Description());
    System.out.println("关键:" + pc2.getClass2Keywords());
    System.out.println("点击:" + pc2.getClass2Click());
    System.out.println("相关:" + pc2.getClass2Interfix());
    }
    System.out.println("=========================================");
    System.out.println("==========================================================");
    }

    }请问main()里的代码在JSP里怎么写?最主要的logic:iterate和bean:define应该怎么写呢?
      

  6.   

    楼主你把它弄得太复杂啦,你把主表记录作为一个List,然后该主表的所有子记录放到另一个List,然后再通通放到另一个List,客观的讲,这种做法不可取,第一,无端增加了资源的开销,第二,你取数据的过程弄复杂了,第三,你的JSP记录显示也变复杂了
      

  7.   

    to:bitou(大鹏一日同风起,扶摇直上九万里) 
    非常感谢你的思路..
    你上面所提供的思路我觉得只能对单一主表显示,
    但我现在要的是所有主表和从表的遍历,有没有更好的,更便于Struts遍历的思路呢?
      

  8.   

    首先,先定义一个BEAN,里面包含要查询和显示的字段.其次,使用SQL 语句把结果集存在两个不同定级的LIST中.然后在JSP中使用循环在显示LIST中不同的属性值.其中LIST结点中保存要显示的数据的结构.
      

  9.   

    两个不同定级的LIST??不同的属性值??
    能具体说清楚点吗?
      

  10.   

    回楼主,这种方法当然也能适用多表查询
    第一步:创建View
    public class EmployeeView implements Serializable{
        private int CORPID;          //主表中的字段    公司ID 
        private String CORPNAME;     //主表中的字段    公司名称
        private String CORPADDRESS;  //主表中的字段    公司地址
        private int EMPLOYEEID;      //从表中的字段    员工ID
        private String EMPNAME;      //从表中的字段     员工姓名
    //然后是一大串的get() set() 方法啦

    --------------------------------------------
    第二步:从数据库取数据
    public Class Test{
    public ArrayList getDataList throw Exception{
    //...
    String sql = "select * from corp,employee where corp.id = employee.id";  //SQL语句
    try{
    //ResultSet rs = stmt.executeQuery(sql);  //执行数据库查询
    ArrayList list = new ArrayList();
    while(rs.next()){    //取记录
       EmployeeView view = new EmployeeView();
       view.setCORPID(rs.getInt("CORPID"));
       view.setCORPNAME(rs.getString("CORPNAME"));
       view.setCORPADDRESS(rs.getString("CORPADDRESS"));
       view.setEMPLOYEEID(rs.getInt("EMPLOYEEID"));
       view.setEMPNAME(rs.getString("EMPNAME"));
    //...
    //View  数据set 完以后别忘了加到ArrayList中去
    list.add(view);    //将view 加到List中
    }
    catch(Exception e){
    System.out.println("------Exception");
    }
    return list;//返回的就是一个包含所有View的ArrayList了,数据就随便你怎么用啦}
    }
    ------------------------------------------------------
    第三步:显示数据
    ArrayList list = Test.getDataList();//即你查询数据库返回List的那个方法
    for(int i=0;i<list.size();i++){
    EmployeeView view = (EmployeeView)list.get(i);
    out.println("公司名称:"+view.getCORPNAME());  //主表数据     公司名称       
    out.println("员工姓名:"+view.getEMPNAME());//取出从表数据  员工姓名
    //其它类似
    }
      

  11.   

    To: bitou(大鹏一日同风起,扶摇直上九万里)
    非常感谢你的思路.......祝你工作顺利,步步高升,女孩子越泡越多.哈哈!