陈述下我的 问题
现在有两张表 contract  planContract
contract 字段包括:id contractCode
planContract 字段包括:id contractCode planId;
一个contract中的 contractCode有多个planId
我现在想通过 contractCode 找到 对应的所有planId;
因为以前设计就有问题 现在不用hibernate关联两个类
而是根据查ID来返回相应关系, 但是怎么才能在页面显示出两表的关系呢
现在配置配置文件里没写关联 service里是这样写的
package com.ywjava.servie;import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;import com.ywjava.domain.Contract;
import com.ywjava.domain.PlanContract;
import com.ywjava.utils.HibernateUtils;public class Service {
public List<Contract> findContractId(){
System.out.println("test1");
Session session  =HibernateUtils.getSession();
Query query =session.createQuery("from Contract");
List<Contract> list =query.list();
System.out.println("list:"+list.toString());
return list;
}public List<PlanContract> findPlanId(String contractId){
System.out.println("test2");
Session session  =HibernateUtils.getSession();
Query query =session.createQuery("from PlanContract pc where pc.contractCode =? ");
query.setString(0, contractId);
List<PlanContract> planList = query.list();
return planList;
}
}action中代码 是这样写的
package com.ywjava.action;import java.util.List;import com.opensymphony.xwork2.ActionSupport;
import com.ywjava.domain.Contract;
import com.ywjava.domain.PlanContract;
import com.ywjava.servie.Service;public class OutAction extends ActionSupport{
Service s = new Service();
private List<Contract> contractList;
private List<PlanContract> planList;
public Service getS() {
return s;
}
public void setS(Service s) {
this.s = s;
}
public List<Contract> getContractList() {
return contractList;
}
public void setContractList(List<Contract> contractList) {
this.contractList = contractList;
}
public String execute(){
contractList = s.findContractId();

for(int i = 0;i<contractList.size();i++){
 String code  =contractList.get(i).getContractCode();
 planList =s.findPlanId(code);
}
return SUCCESS;}
}
现在的问题是 怎么在jsp页面显示出他们的关系   用struts2的迭代标签可以么我现在 在页面这样写的我如何才能显示出 一个 合同对应的多个计划编号<body>
   <form action="">
   <table>
   <tr>
   <td>计划编号</td>
    <td>合同编号</td>
   </tr>
   <tr>
   <td></td>
    <td><select>
    <option> </option>
     </select>
      </td>
   </tr>
   </table>
   
   </form>
  </body>PS:大家不要说关于关联配置的问题 我知道关联后直接调属性可以显示,我现在希望能通过现在这样的办法 显示到页面 谢谢

解决方案 »

  1.   

    这个很容易实现,你在Contract对象里面添加一个List<PlanContract> planList属性,
     for(int i = 0;i<contractList.size();i++){
             String code  =contractList.get(i).getContractCode();
             planList =s.findPlanId(code);
        }
    在这里面把s.findPlanId(code)赋给每一个Contract对象,然后在页面上使用双层的迭代,就能够搞定了。
      

  2.   


    怎么在页面双层迭代 用 struts的标签可以么?
    如果可以 怎么弄
      

  3.   

    该怎么迭代就怎么迭代呗  用jstl都能迭代! struts的当然可以
      

  4.   


    能不能说下 用 struts标签怎么迭代出
      

  5.   

    <s:iterator>还是<logic:iterator>?
      

  6.   

     在你的Action 中重新构造一个 map 对象撒。 
     用的那个contractCode 做key值
             planId       做value值
      

  7.   

     然后将 map 对象放在你的list对象中, 这样在页面就不需要多层迭代勒!
      

  8.   

    <s:iterator value="contractList" var="contract">
        <s:iterator value="#contract.planList" var="plan">
        </s:iterator>
    </s:iterator>
    或者用11L的那种方式
      

  9.   

    我这样写 对么??
    <ww:iterator value="contract" status="contract">
    <tr>
    <td  width="80" class="titlenm">
    <select  style="width:80px">
    <ww:iterator value="#contract.setPlanContract" status="plan">
    <option><ww:property value="plan.planId"/></option>
    </ww:iterator>
    </select></td>

    </ww:iterator >
      

  10.   

    显示不出直  
    但是在action中可以输出值
      

  11.   

    select有专门的<s:select>好吧?  不用这么费劲
      

  12.   

    当然可以了。可以用struts的iterator 标签。已可以用C标签也可以,仅供参考
    <table>
    <c:forEach var="contract" items="${requestScope.contractList}">
    <tr>
    <td>计划编号:</td>
    <td>
        <select name="contractCode" onchange="document.forms[0].submit();">
         <option value="${contract.contractCode}">${contract.contractCode}</option>
        </select>
    </td>
    </tr>
    </c:forEach>
    <tr>
    <td>合同编号:</td>
    <td>${requestScope.contractCode}</td>
    </tr>
    <c:forEach var="plan" items="${requestScope.planList}">
    <tr>
    <td>计划编号:</td>
    <td>${plan.planId}</td>
    </tr>
    </c:forEach>
    </table>
      

  13.   

    就是因为没有关联所以你待在action里面自己去根据contractCode查到planList然后再让request带到页面上显示出来啊。
      

  14.   


    用struts2 标签 怎么显示?
      

  15.   

    用struts2标签的话只要把表单里面的需要提交的标签换成struts2的标签就可以了。
    没用过struts2,只用过struts1,楼主一定要用struts2那一套标签的话,就替换了吧。