日期:2014-05-19  浏览次数:20722 次

[求助]struts标签无法获取遍历的值
本人菜鸟 刚入门, 请问下为何我这个strtus标签iterator无法遍历值呢? 页面没有任何报错,也没有空指针异常,就是那几个值无法传递过来(productName,fixedPrice,dangPrice都是product类中的属性). 
包含关系: cartItems-->item-->pro.productName

请看下面代码: 
JScript code

 <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>



Java code

================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;
        }



------解决方案--------------------
楼上说要加id 貌似不加也可以、我的就没加id也能实现遍历;
LZ 你Debug看一下你返回的结果集里面item对象中的那个pro
属性,确定下是否为空呢?
------解决方案--------------------
另外就是 你的Item对象中的Pro属性对象有没有实现set get方法?这个是必须实现的、如果你要在页面遍历的话
------解决方案--------------------
<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>
这样就可以了 你试试看看
------解决方案--------------------
像这种页面没值,无非就是下面几种情况
1.数据库没数据(进数据库查看下表)
2.没有查询到(调试,看看你的dao里是否有bug)
3.你的标签用错了(你自己一个一个的调试下就知道了,实在不行换种标签)
4.有时候会有缓存的现象,清理下缓存(这中很少)
------解决方案----------------