2016-04-25 18 views
0

私はカートに追加できるいくつかの株式を使って簡単なWebアプリケーションを作成しようとしています。コードとjspファイルをコピーします。私はこの問題を解決するための正しい方向にいることを願っています。私はデータベースからデータを取ります。今のところ私は何がカートに追加されたのかを見せたいので、後でdbに保存しようとします。Spring MVCアプリケーションをカートに追加jsp JAVA

完全なスタックトレース。

org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/cart.jsp at line 14 

11:  <div style="padding-right: 40px"> 
12:   <table border="1"> 
13:    <tr> 
14:     <c:forEach items="${cpu}" var="c"> 
15:      <td>Name</td> 
16:      <td>${c.name}</td> 
17:     </c:forEach> 


Stacktrace: 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:574) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:461) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1243) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 
root cause 

javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt; 
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909) 
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838) 
    org.apache.jsp.WEB_002dINF.views.cart_jsp._jspService(cart_jsp.java:156) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1243) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 
root cause 

javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt; 
    org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:274) 
    org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:238) 
    org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:155) 
    javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:256) 
    org.apache.jsp.WEB_002dINF.views.cart_jsp._jspx_meth_c_005fforEach_005f0(cart_jsp.java:178) 
    org.apache.jsp.WEB_002dINF.views.cart_jsp._jspService(cart_jsp.java:138) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1243) 
    org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:968) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:870) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:844) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 

cart.jsp

<body> 
    <div style="padding-right: 40px"> 
     <table border="1"> 
      <tr> 
       <c:forEach items="${cpu}" var="c"> 
        <td>Name</td> 
        <td>${c.name}</td> 
       </c:forEach> 



    </div> 

@Controllerコントローラ

public class CartController { 

    @RequestMapping(value = "/cart", method = RequestMethod.POST) 
    public String someAction(@ModelAttribute("cpu") Cpu cpu, Model model) { 
     model.addAttribute("cpu", cpu); 
     return "cart"; 
    } 
} 

CPU

@SuppressWarnings("serial") 
public class Cpu implements Serializable { 

    public static final String SESSION_PROPERTY = "cpu"; 

    private int id; 

    private String name; 

    private String socket; 

    private int price; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getSocket() { 
     return socket; 
    } 

    public void setSocket(String socket) { 
     this.socket = socket; 
    } 

    public int getPrice() { 
     return price; 
    } 

    public void setPrice(int price) { 
     this.price = price; 
    } 

} 
+1

"Iterable"を明示的に実装していない 'Cpu'型に、"提供された項目を反復する方法を知らない "からエラーを追跡できます。あなたが*含まない*と決めたコードの唯一のビットなので、知ることは不可能です。 – kryger

+0

@kryger私はcpuクラスを追加しました。 – RockOrDead

答えて

0

反復のための明確な要件がありながら...あなたは反復処理できるオブジェクトのコレクションを持っているあなたは、あなたのカスタムCpuタイプの単一のインスタンス上<c:forEach>を使用して反復処理しようとしています。コレクション型の

多数のjava.util.Collectionのすべての実装(リスト、LinkedListは、ArrayListに、ベクトル、スタック、設定を含みます)を含め、<c:forEach>でサポートされている、とされています。これは、JSTL仕様が言うことですjava.util.Map(HashMap、Hashtable、Properties、Provider、Attributesを含む)

(...)するjava.util.Iteratorとのjava.util.Enumerationの

実装が(...)だけでなく サポートされています。

List<Cpu>を作成し、後でモデル属性を使用してJSPページに渡すようにコントローラを変更する必要があります。オンラインストアでカートを実装するための一般的なイディオムは、HttpSessionを使用してすべてのユーザーのアイテムを蓄積することです。後でCartControllerにあるこの共有セッションオブジェクトにアクセスし、そこに置かれたすべてのアイテムを取得できます。

+0

どうすればいいですか? – RockOrDead

+0

あなたはすでに1週間前にこの問題を処理していました:http://stackoverflow.com/q/36682201/1240557。理解できない基本的な概念がある場合は、 "動作するまですべて試してください"だけでなく、評判の良いソースから公式のドキュメントやチュートリアルを参照する必要があります。 – kryger

関連する問題