[Struts]主从表结构的数据显示! 楼主说的是多表查询??要不你专门写个View视图,其中包括你耍显示的所有属性就可以了,不过就是有点麻烦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以说是多表,主要是主表和从表,怎么样在STRUTS里显示出来呢? 专门写个VIEW?不明白.是自定义TAG吗? 还有个问题,1.在ACTION里遍历好返回一个LIST呢,然后在JSP直接遍历?2.还是在ACTION里返回两个主从的LIST,然后在JSP循环遍历呢?希望大侠们多多指教啊......... 不论主从表还是多表查询,其结果均可用一个简单的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了,数据就随便你怎么用啦 我觉得用二维列表还可以,但在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应该怎么写呢? 楼主你把它弄得太复杂啦,你把主表记录作为一个List,然后该主表的所有子记录放到另一个List,然后再通通放到另一个List,客观的讲,这种做法不可取,第一,无端增加了资源的开销,第二,你取数据的过程弄复杂了,第三,你的JSP记录显示也变复杂了 to:bitou(大鹏一日同风起,扶摇直上九万里) 非常感谢你的思路..你上面所提供的思路我觉得只能对单一主表显示,但我现在要的是所有主表和从表的遍历,有没有更好的,更便于Struts遍历的思路呢? 首先,先定义一个BEAN,里面包含要查询和显示的字段.其次,使用SQL 语句把结果集存在两个不同定级的LIST中.然后在JSP中使用循环在显示LIST中不同的属性值.其中LIST结点中保存要显示的数据的结构. 两个不同定级的LIST??不同的属性值??能具体说清楚点吗? 回楼主,这种方法当然也能适用多表查询第一步:创建Viewpublic 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());//取出从表数据 员工姓名//其它类似} To: bitou(大鹏一日同风起,扶摇直上九万里)非常感谢你的思路.......祝你工作顺利,步步高升,女孩子越泡越多.哈哈! 求OWC控件与Java(jsp)使用的方法 进来就有分哦 请问一下classloader的问题,我写了个class继承ClassLoader jsp登录页面?图片怎么弄? xfire spring问题 tomcat 内存溢出问题 使用过JMS的朋友帮忙 Excel上传乱码问题 关于协议传输的问题! 请教:struts中<logic:iterate>与Map的使用? structs的好处在哪里? 关于JDBC的execute方法的疑惑???????????
2.还是在ACTION里返回两个主从的LIST,然后在JSP循环遍历呢?希望大侠们多多指教啊.........
主表中有
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了,数据就随便你怎么用啦
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应该怎么写呢?
非常感谢你的思路..
你上面所提供的思路我觉得只能对单一主表显示,
但我现在要的是所有主表和从表的遍历,有没有更好的,更便于Struts遍历的思路呢?
能具体说清楚点吗?
第一步:创建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());//取出从表数据 员工姓名
//其它类似
}
非常感谢你的思路.......祝你工作顺利,步步高升,女孩子越泡越多.哈哈!