[Struts]主从表结构的数据显示!
大家在用Struts的时候查询遍历主从表数据是怎么做的?
在Action里应该怎么写? JSP里应该怎么写? 请举个简单的例子.
问题点数:100、回复次数:16Top
1 楼nimifeng(学海无涯.......苦作舟....理解是美!!!Mars.Neil)回复于 2005-05-16 11:54:16 得分 0
不熟.帮顶.学习.Top
2 楼loveyousomuch(★Allen★)回复于 2005-05-16 11:59:39 得分 0
楼主说的是多表查询??
要不你专门写个View视图,其中包括你耍显示的所有属性就可以了,不过就是有点麻烦Top
3 楼jade007(询人启事)回复于 2005-05-16 12:03:21 得分 0
可以说是多表,主要是主表和从表,怎么样在STRUTS里显示出来呢?Top
4 楼jade007(询人启事)回复于 2005-05-16 12:04:24 得分 0
专门写个VIEW?不明白.是自定义TAG吗?Top
5 楼jade007(询人启事)回复于 2005-05-16 14:52:17 得分 0
还有个问题,
1.在ACTION里遍历好返回一个LIST呢,然后在JSP直接遍历?
2.还是在ACTION里返回两个主从的LIST,然后在JSP循环遍历呢?
希望大侠们多多指教啊.........Top
6 楼bitou(大鹏一日同风起,扶摇直上九万里)回复于 2005-05-17 18:06:08 得分 100
不论主从表还是多表查询,其结果均可用一个简单的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了,数据就随便你怎么用啦
Top
7 楼GFNotFoundException(喜欢下雨天)回复于 2005-05-17 19:27:43 得分 0
学习ing~关注Top
8 楼jade007(询人启事)回复于 2005-05-18 10:54:33 得分 0
我觉得用二维列表还可以,但在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应该怎么写呢?Top
9 楼bitou(大鹏一日同风起,扶摇直上九万里)回复于 2005-05-18 11:37:38 得分 0
楼主你把它弄得太复杂啦,你把主表记录作为一个List,然后该主表的所有子记录放到另一个List,然后再通通放到另一个List,客观的讲,这种做法不可取,第一,无端增加了资源的开销,第二,你取数据的过程弄复杂了,第三,你的JSP记录显示也变复杂了
Top
10 楼jade007(询人启事)回复于 2005-05-18 11:52:46 得分 0
还有更好的方法吗??请指教了.Top
11 楼jade007(询人启事)回复于 2005-05-18 11:56:50 得分 0
to:bitou(大鹏一日同风起,扶摇直上九万里)
非常感谢你的思路..
你上面所提供的思路我觉得只能对单一主表显示,
但我现在要的是所有主表和从表的遍历,有没有更好的,更便于Struts遍历的思路呢?Top
12 楼lchao12(南海)回复于 2005-05-20 14:27:09 得分 0
首先,先定义一个BEAN,里面包含要查询和显示的字段.
其次,使用SQL 语句把结果集存在两个不同定级的LIST中.然后在JSP中使用循环在显示LIST中不同的属性值.其中LIST结点中保存要显示的数据的结构.Top
13 楼jade007(询人启事)回复于 2005-05-23 10:05:22 得分 0
两个不同定级的LIST??不同的属性值??
能具体说清楚点吗?Top
14 楼bitou(大鹏一日同风起,扶摇直上九万里)回复于 2005-05-23 15:58:43 得分 0
回楼主,这种方法当然也能适用多表查询
第一步:创建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());//取出从表数据 员工姓名
//其它类似
}Top
15 楼wkj520()回复于 2005-05-24 14:13:21 得分 0
不错
大部门都是这样处理主从关系的Top
16 楼jade007(询人启事)回复于 2005-05-24 15:13:32 得分 0
To: bitou(大鹏一日同风起,扶摇直上九万里)
非常感谢你的思路.......祝你工作顺利,步步高升,女孩子越泡越多.哈哈!Top




