Code Bye

关于struts logic:iterate的问题

 

大家好! 请问这段代码有什么问题,谢谢
shoppingFrom 中包含一个Arraylist productList.

 <logic:iterate id=”item” name=”shoppingForm” property=”productList” >
                <tr bgcolor=”#ffff88″>
                  <td>
                    <html:hidden name=”item” property=”productid”/>
                    <bean:write name=”item” property=”name”/>
                  </td>
                  <td>
                    <bean:write name=”item” property=”note”/>
                  </td>
                  <td>
                    <bean:write name=”item” property=”price” format=”####.##”/>
                  </td>
                  <td>
                    <input type=”text”/>
                  </td>
                  <td><html:button property=”” onclick=”doDifferent(“”addProduct””,
                    this)”>放入购物车</html:button></td>

                    </tr>
                    </logic:iterate>

action中有这一段:
 public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) {
        ShoppingForm shoppingForm = (ShoppingForm) form;
        String event=shoppingForm.getEvent();
        ShoppingBo bo=ShoppingBo.getInstance();
        …..        
        shoppingForm.setProductList((ArrayList)bo.getProductList());
        return mapping.findForward(“shopping”);

    }
出现如下的错误
exception javax.servlet.ServletException: No collection found
 org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
 org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
 org.apache.jsp.shopping_jsp._jspService(org.apache.jsp.shopping_jsp:254)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause 
javax.servlet.jsp.JspException: No collection found
 org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:238)
 org.apache.jsp.shopping_jsp._jspService(org.apache.jsp.shopping_jsp:160)
 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
 javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

看不出来
按出错信息的意思是找不到集合~~~~~
5分
是不是因为ArrayList没有初始化?
5分
这个问题好解决
在你的代码中加这么一句就好了
request.setAttribute(“list”,ArrayList)bo.getProductList())
但是我也不知道为什么
shoppingForm.setProductList((ArrayList)bo.getProductList());
这样在页面没法显示
错误是说<logic:iterate id=”item” name=”shoppingForm” property=”productList” >里的集合没有找到.
“shoppingForm”是什么?从哪得到的?
<logic:iterate id=”item” name=”shoppingForm” property=”productList” >
这个标签是遍历保存在四个范围内的对象的.name是保存的名字,如request.setAttribute(“aa”,”aa”),那么name就是”aa”,property是name对象的一个属性,在这里应该是个集合.
5分
javabeginner2006() 正解!
可以在Action中
request.setAttribute(“productList”, shoppingForm.getProductList);
JSP改成:
<logic:iterate id=”item” name=”productList” scope=”request”>
···
<logic:iterate />
试试。
productList是在跳转到这个JSP页面前的ACTION中对request.setAttribute(“productList”,productListobj);
productListobj这通过hibernate或自写的方法获得的一个product实体集合
5分
shoppingForm.setProductList((ArrayList)bo.getProductList());
后面加上
request.setAttribute(mapping.getAttribute(), shoppingForm);
不然你设置了List的Form是不会保存到request里面去的,白设了
在你的jsp页面中引入
<jsp:useBean id=”expertPicForm” class=”com.shinetech.expert.controller.ExpertPicForm” scope=”session”/>

要么就是把name=”shoppingForm” 去掉。试试!

ok 解决了 谢谢各位!~

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于struts logic:iterate的问题