刚上手struts,遇这样一个问题,有一张“存储表”,里面有一个ISBN字段,根据这个字段能找到很多条记录,每一条记录有一个id,根据这个id到“仓库表”查找address字段,存储表中的每一条记录连同每一个对应的address要用一个foreach循环在前台展示出来
具体代码如下:
后台业务逻辑
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws UnsupportedEncodingException { // TODO Auto-generated method stub HttpSession session = request.getSession();
Session s = HibernateUtil.currentSession();
StockForm stockForm = (StockForm) form;
String ISBN = stockForm.getISBN();
request.setAttribute("ISBN", ISBN);
   System.out.println(ISBN);
        Stock stock; 
try {
HibernateUtil.beginTransaction();
String str = new String();
str = " from Stock stock where stock.ISBN = '" + ISBN+ "'";

int i=s.createQuery(str).list().size();
System.out.println(i);

List list=s.createQuery(str).list();
request.setAttribute("list", list);

Iterator it = list.iterator();
Integer id = null;
while (it.hasNext()){

stock = (Stock) it.next();
id =stock.getWarehouseid();

String str1 = " from Warehouse warehouse where warehouse.id = '" + id+ "'";
List list1=s.createQuery(str1).list();
String address = "";
request.setAttribute("list1", list1);
for(int i1=0;i1<list1.size();i1++){
Warehouse wh= new Warehouse();
wh=(Warehouse)list1.get(i1);
address=wh.getAddress();
System.out.println(address);
request.setAttribute("wh", wh);
}
}
return mapping.findForward("return");

} catch (HibernateException e) {
e.printStackTrace();
} finally {
s.close();
} ActionMessages errors = new ActionMessages();
errors.add("login error", new ActionMessage("login.error"));
saveErrors(request, errors);
return mapping.getInputForward(); }
}前台显示页面代码如下<c:forEach items="${list}" var="list" >    <tr>
    <td  height="22" align="center"><font color="#000000"><c:out value="${list.entertime}"/></font></td>
    <td height="22" align="left">
             <span class="STYLE8"></span><span class="STYLE8">快件【</span><font color="blue"><c:out value="${list.ISBN}"/></font><span class="STYLE8">】已到<c:out value="${wh.address}"/> </span>
            <span class="STYLE8"></span><span class="STYLE8">派件员【</span><font color="blue"><c:out value="${list.in_employeeid}"/></font><span class="STYLE8">】已进行入库登记</span>
            
       </td>
        <td  height="22" align="center"><font color="#000000"><c:out value="${list.outtime}"/></font></td>
    <td height="22" align="left">
            
            <span class="STYLE8"></span><span class="STYLE8">派件员【</span><font color="blue"><c:out value="${list.out_employeeid}"/></font><span class="STYLE8">】已进行出库登记</span>
            
       </td>  
  </tr>
</c:forEach>
 其他的都显示没问题,主要是address同步这个地方,显示出来的都是最后一条字段的值,恳请各位高手多多指点!

解决方案 »

  1.   

    请求域中wh只有一个,
    所以你实际上总是用后一个wh把前一个wh值给冲掉了。
      

  2.   

    for(int i1=0;i1<list1.size();i1++){
    Warehouse wh= new Warehouse();
    wh=(Warehouse)list1.get(i1);
    address=wh.getAddress();
    System.out.println(address);
    request.setAttribute("wh", wh);
    }
    }
    不解你为何这样做
    这样做地址当然是同一个啦,你在页面也没必要${wh.address} 
    直接从list1里去就可以了啊,根据你的页面应该修改为${list.address}楼主不防是一样
      

  3.   

    感谢各位的回复,但是我list里面的值是从stock表里面得到的,而address是从warehouse表查询而得到的,所以list里面没有${list.address},高手能不能给出解决的方案代码
      

  4.   

    用Map吧,变动涉及到的Action代码如下(红色为修改之处)List list=s.createQuery(str).list();
    request.setAttribute("list", list);Iterator it = list.iterator();
    Integer id = null;
    List list2 = new ArrayList();
    request.setAttribute("list2", list2);

    while (it.hasNext()){stock = (Stock) it.next();
    id =stock.getWarehouseid();String str1 = " from Warehouse warehouse where warehouse.id = '" + id+ "'";
    List list1=s.createQuery(str1).list();
    String address = "";
    request.setAttribute("list1", list1);
    Map item = new HashMap();
    list2.add(item);
    item.put("stock", stock);

    for(int i1=0;i1<list1.size();i1++){
    Warehouse wh= new Warehouse();
    wh=(Warehouse)list1.get(i1);
    address=wh.getAddress();
    item.put("address", address);
    System.out.println(address);
    request.setAttribute("wh", wh);

      

  5.   

    然后,页面中如此修改(看红色):<c:forEach items="${list2}" var="list" >  <tr>
      <td height="22" align="center"><font color="#000000"><c:out value="${list.stock.entertime}"/></font></td>
      <td height="22" align="left">
      <span class="STYLE8"></span><span class="STYLE8">快件【</span><font color="blue"><c:out value="${list.stock.ISBN}"/></font><span class="STYLE8">】已到<c:out value="${list.address}"/> </span>
      <span class="STYLE8"></span><span class="STYLE8">派件员【</span><font color="blue"><c:out value="${list.stock.in_employeeid}"/></font><span class="STYLE8">】已进行入库登记</span>
       
      </td>
      <td height="22" align="center"><font color="#000000"><c:out value="${list.stock.outtime}"/></font></td>
      <td height="22" align="left">
       
      <span class="STYLE8"></span><span class="STYLE8">派件员【</span><font color="blue"><c:out value="${list.stock.out_employeeid}"/></font><span class="STYLE8">】已进行出库登记</span>
       
      </td>  
      </tr>
    </c:forEach>