本人菜鸟 刚入门, 请问下为何我这个strtus标签iterator无法遍历值呢? 页面没有任何报错,也没有空指针异常,就是那几个值无法传递过来(productName,fixedPrice,dangPrice都是product类中的属性). 
包含关系: cartItems-->item-->pro.productName请看下面代码:  <s:iterator value="cartItems">
     <tr class='td_no_bord'>
<td>
  <a href="#"><s:property value="#item.pro.productName" /></a>
</td>
<td class="buy_td_5">
  <span class="c_gray"><s:property value="%{item.pro.fixedPrice}"/></span>
</td>
<td class="buy_td_4">
  <span><s:property value="%{item.pro.dangPrice}"/></span>
</td>
    </tr>
</s:iterator>================BuyAction.java(在struts.xml中有定义,根据私有属性获取值)======================
public class BuyAction  extends BaseAction{
//input
private int id;
//output
private List<CartItem> cartItems;
private CartItem item;
private boolean hasBook;

ProductDAO pd = new JdbcProductDAO();
CartBean cb = new CartBean(); public String addBook(){
         item = cb.buy(id);// <----调用CartBean.java的buy()方法
if(cartItems==null){
cartItems = new ArrayList<CartItem>();
}
if(cartItems.isEmpty()){
hasBook = false;
cartItems.add(0, item);
return "addInCart";
                  }====================CartBean.java======================
public class CartBean extends BaseAction implements Cart{
private CartItem item;

public CartItem buy(int bid) {
//根据商品pid,获取商品对象,封装成CartItem
ProductDAO pd = new JdbcProductDAO();
Book book = new Book();
try {
book = pd.getAbook(bid);//能够顺利通过JDBC获取数据库存储的数据
item = new CartItem(book,1,true);
     } catch (SQLException e) {
e.printStackTrace();
}
      return item;
}

解决方案 »

  1.   

    可能之前说的不够清楚, 看看这个:
    BuyAction返回items集合对象,包含关系: items集合-->item对象(拥有pro属性)-->pro(产品对象)-->productName, price等属性. 那这个iterator应该怎么写呢? 请大侠指点下小弟
     <s:iterator value="cartItems">     <tr>    <td>      <a href="#"><s:property value="item.pro.productName"/></a>    </td>    <td class="buy_td_5">      <span><s:property value="%{item.pro.fixedPrice}"/></span>    </td>    <td class="buy_td_4">      <span><s:property value="%{item.pro.dangPrice}"/></span>    </td>    </tr></s:iterator>
      

  2.   

    <s:iterator value="cartItems">后来要加一个id的。
    <s:iterator value="cartItems" id="ss">然后用:<s:iterator value="cartItems">s:property value="#ss.pro.dangPrice"/>
      

  3.   

    楼上说要加id 貌似不加也可以、我的就没加id也能实现遍历;
    LZ 你Debug看一下你返回的结果集里面item对象中的那个pro
    属性,确定下是否为空呢?
      

  4.   

    另外就是 你的Item对象中的Pro属性对象有没有实现set get方法?这个是必须实现的、如果你要在页面遍历的话
      

  5.   

     <s:iterator value="cartItems">
       <s:property value="对象名.属性" />
    </s:iterator>
    这样就可以了<s:iterator value="cartItems" var="item">     <tr>    <td>      <a href="#"><s:property value="item.productName"/></a>    </td>    <td class="buy_td_5">      <span><s:property value="%{item.fixedPrice}"/></span>    </td>    <td class="buy_td_4">      <span><s:property value="%{item.dangPrice}"/></span>    </td>    </tr></s:iterator>
    这样就可以了 你试试看看
      

  6.   

    像这种页面没值,无非就是下面几种情况
    1.数据库没数据(进数据库查看下表)
    2.没有查询到(调试,看看你的dao里是否有bug)
    3.你的标签用错了(你自己一个一个的调试下就知道了,实在不行换种标签)
    4.有时候会有缓存的现象,清理下缓存(这中很少)
      

  7.   

    像这种页面没值无非就是一下几种情况:
    1.数据库没数据(进数据库查询下表)
    2.你的daoimpl里有sql错(打个断电调试进去)
    3.标签语法错(自己在页面一个一个的调试,实在不行换种标签)
    4.缓存(这种很少,但是会有)
    这样子的小问题你要自己慢慢找,下次已有类是的你就可以一下子找到bug解决,对你的学习是有帮助的
      

  8.   

    LZ先看下后台得到值没,如果得到了,再看看前台显示的对不对,有时候细节很重要,我一般用EL表达式呢,不太用 Struts 带的标签