Search code examples
hibernatejspspring-mvccrudjsp-tags

Don't know how to iterate over supplied "items" in forEach


Hi I got an error when I display details about selected Ski:

JSP code:

    <c:forEach var="skis" items="${skis}">

    <div class="container">
        <div class="card">
            <div class="container-fliud">
                <div class="wrapper row">
                    <div class="preview col-md-6">

                        <div class="preview-pic tab-content">
                            <div class="tab-pane active" id="pic-1"><img src="#" /></div>
                        </div>
                      </div>
                    <div class="details col-md-6">
                        <h3 class="product-title">${skis.company} - ${skis.model}</h3>
                         <p class="product-description">${skis.description}</p>
                        <h4 class="price">price per day: <span>12$</span></h4>
                        <h4>Day's reserved: </h4>
</c:forEach>

Controller:

     @RequestMapping(value = "/ski/show-details/{skisId}" , method = RequestMethod.GET)
    public String getShowDetailsPage(@PathVariable("skisId") Integer skisId, Model model) {

        Skis skis = skisDAO.findOne(skisId);


        model.addAttribute("skis", skis);

        return "ski-details";
    }

Model:

    @Entity
    @Table(name = "skis")
    public class Skis {

    @Id
    @Column(name= "skisId")
    @GeneratedValue
    private Integer skisId;

    @Column(name = "company", length = 20)
    private String company;

    @Column(name = "model", length = 20)
    private String model;

    @Column(name = "description", length = 200)
    private String description;

    @Lob
    @Basic(fetch = FetchType.LAZY)
    private byte[] photo;



    @Repository
    public interface SkisDAO extends CrudRepository<Skis, Integer> {

I tried with method like this

 @Query("select s from Skis s where s.skisId = :skisId")
Skis findBySkisId(@Param("skisId") Integer skisId);

But it's same problem.

Someone can help?

Stacktrace is as below:

javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach> 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.ski_002ddetails_jsp._jspx_meth_c_005fforEach_005f0(ski_002ddetails_jsp.java:483) org.apache.jsp.WEB_002dINF.ski_002ddetails_jsp._jspService(ski_002ddetails_jsp.java:317) 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)


Solution

  • Remove foreach loop, findOne method return one object. You can access value directly like this: ${skis.company}.