本人菜鸟 刚入门, 请问下为何我这个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;
}
包含关系: 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;
}
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>
<s:iterator value="cartItems" id="ss">然后用:<s:iterator value="cartItems">s:property value="#ss.pro.dangPrice"/>
LZ 你Debug看一下你返回的结果集里面item对象中的那个pro
属性,确定下是否为空呢?
<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.有时候会有缓存的现象,清理下缓存(这中很少)
1.数据库没数据(进数据库查询下表)
2.你的daoimpl里有sql错(打个断电调试进去)
3.标签语法错(自己在页面一个一个的调试,实在不行换种标签)
4.缓存(这种很少,但是会有)
这样子的小问题你要自己慢慢找,下次已有类是的你就可以一下子找到bug解决,对你的学习是有帮助的