2017-03-24 23 views
0

我有一个控制器,可以从数据库获取所有新闻,并且同时计算每条新闻上的评论数量,但是我遇到了问题,因为即使数据正确地从数据库中提取出来, jsp的不每条新闻的对象与它对应的评论数混合...如何链接jsp结果中的两个对象?

这里是我的控制器:

@RequestMapping(value = "/viewstatus", method = RequestMethod.GET) 
public ModelAndView viewStatus(ModelAndView modelAndView, @RequestParam(name = "p", defaultValue = "1") int pageNumber) { 

    Page<StatusUpdate> page = statusUpdateService.getPage(pageNumber); 

    for(StatusUpdate statusUpdate: page){ 

     SiteUser siteUser= statusUpdate.getSiteUser(); 

     modelAndView.getModel().put("siteuser", siteUser); 

     int countComments = commentService.countStatusComments(statusUpdate); 

     modelAndView.getModel().put("commentscounter", countComments); 
    } 

    modelAndView.getModel().put("page", page); 

    modelAndView.setViewName("app.viewStatus"); 

    return modelAndView; 
} 

这里是控制台结果:

!!!!!! STATUSUPDATECONTROLLER:viewOneStatus:Count del comment:2 !!!!! VIEWSTATUS statusUpdate:StatusUpdate [id = 98,title = Title97,text = Status update 97,added = 2017-06-28 12:52:04.0,siteUser = SiteUser [id = 1,[email protected],plainPassword = null,password = $ 2a $ 10 $ TlfLjCcq8vPZHYkWcZ4rwurnqx5/g5C.5nk3hGTdiG6/cxlx1COPq,enabled = true,firstname = Mike,surname = River,repeatPassword = null,role = ROLE_ADMIN]] 2017-03-24 21:00:00 23.278 DEBUG 1080 --- [nio-8080-exec-6] org.hibernate.SQL:select count(comment0_.id)as col_0_0_ from comment0_ left outer join status_update statusupda1_ on comment0_.statusupdateid = statusupda1_.id where statusupda1_.id =? Hibernate:select count(comment0_.id)as col_0_0_ from comment0_ left outer join status_update statusupda1_ on comment0_.statusupdateid = statusupda1_.id where statusupda1_.id =? !!!!!! STATUSUPDATECONTROLLER:viewOneStatus:Count del comment:1 !!!!! VIEWSTATUS statusUpdate:StatusUpdate [id = 97,title = Title96,text =状态更新96,增加= 2017-06-27 12:52:04.0,siteUser = SiteUser [id = 1,email = [email protected],plainPassword = null,password = $ 2a $ 10 $ TlfLjCcq8vPZHYkWcZ4rwurnqx5/g5C.5nk3hGTdiG6/cxlx1COPq,enabled = true,firstname = Mike,surname = River,repeatPassword = null,role = ROLE_ADMIN]] 2017-03-24 21:00:23.280 DEBUG 1080 --- [nio-8080-exec-6] org.hibernate.SQL:select count(comment0_.id)as col_0_0_ from comment0_ left outer join status_update statusupda1_ on comment0_.statusupdateid = statusupda1_.id where statusupda1_.id =? Hibernate:select count(comment0_.id)as col_0_0_ from comment0_ left outer join status_update statusupda1_ on comment0_.statusupdateid = statusupda1_.id where statusupda1_.id =? !!!!!! STATUSUPDATECONTROLLER:viewOneStatus:计数删除评论:0 !!!!! VIEWSTATUS statusUpdate:StatusUpdate [id = 96,title = Title95,text =状态更新95,增加= 2017-06-26 12:52:04.0,siteUser = SiteUser [id = 1,[email protected],plainPassword = null,password = $ 2a $ 10 $ TlfLjCcq8vPZHYkWcZ4rwurnqx5/g5C.5nk3hGTdiG6/cxlx1COPq,enabled = true,firstname = Mike,surname = River,repeatPassword = null,role = ROLE_ADMIN]] 2017-03-24 21:00:23.282 DEBUG 1080 --- [nio-8080-exec-6] org.hibernate.SQL:select count(comment0_.id)as col_0_0_ from comment0_ left outer join status_update statusupda1_ on comment0_.statusupdateid = statusupda1_.id where statusupda1_.id =? Hibernate:select count(comment0_.id)as col_0_0_ from comment0_ left outer join status_update statusupda1_ on comment0_.statusupdateid = statusupda1_.id where statusupda1_.id =? !!!!!! STATUSUPDATECONTROLLER:viewOneStatus:计数删除评论:0 !!!!! VIEWSTATUS statusUpdate:StatusUpdate [id = 95,title = Title94,text =状态更新94,增加= 2017-06-25 12:52:04.0,siteUser = SiteUser [id = 1,email = [email protected],plainPassword = null,password = $ 2a $ 10 $ TlfLjCcq8vPZHYkWcZ4rwurnqx5/g5C.5nk3hGTdiG6/cxlx1COPq,enabled = true,firstname = Mike,surname = River,repeatPassword = null,role = ROLE_ADMIN]] 2017-03-24 21:00:23.284 DEBUG 1080 --- [nio-8080-exec-6] org.hibernate.SQL:select count(comment0_.id)as col_0_0_ from comment0_ left outer join status_update statusupda1_ on comment0_.statusupdateid = statusupda1_.id where statusupda1_.id =? Hibernate:select count(comment0_.id)as col_0_0_ from comment0_ left outer join status_update statusupda1_ on comment0_.statusupdateid = statusupda1_.id where statusupda1_.id =? !!!!!!STATUSUPDATECONTROLLER:viewOneStatus:计数德尔评论:0

这里是JSP:

<table class="table table-hover">        
    <c:forEach var="statusUpdate" items="${page.content}"> 
     <tr> 
      <td> 
       <ul class="list-inline posted-info"> 
        <li>By 
         <a href="${contextRoot}/profile/${statusUpdate.siteUser.id}"> 
          ${statusUpdate.siteUser.firstname} 
          ${statusUpdate.siteUser.surname} 
         </a> 
        </li> 
        <li>Posted</li> 
        <li> 
         <fmt:formatDate pattern="EEEE d MMMM y 'at' H:mm:ss" value="${statusUpdate.added}" /> 
        </li> 
       </ul> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <h2> 
        <a href="${contextRoot}/viewonestatus/${statusUpdate.id}">${statusUpdate.title}></a> 
       </h2> 
       <p>${statusUpdate.text}</p> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <ul class="post-shares"> 
        <li> 
         <a href="#"> <i class="rounded-x icon-speech"></i> 
          <span>${commentscounter}</span> 
         </a> 
        </li> 
        <li><a href="#"><i class="rounded-x icon-share"></i></a></li> 
        <li><a href="#"><i class="rounded-x icon-heart"></i></a></li> 
       </ul> 
      </td> 
     </tr>     
    </c:forEach>         
</table> 

这里来的结果(0所有的意见时,是不正确的):

enter image description here

回答

0

问题是如何将commentscouner添加到模型中。

for(StatusUpdate statusUpdate: page){ 
    SiteUser siteUser= statusUpdate.getSiteUser(); 
    modelAndView.getModel().put("siteuser", siteUser); 
    int countComments = commentService.countStatusComments(statusUpdate); 

    // next line is a cause of problem 
    modelAndView.getModel().put("commentscounter", countComments); 
} 

每当您使用相同名称设置新值时:commentscouner。因此,每次覆盖上一次迭代循环中添加的值时。这意味着当循环结束时,模型将包含最后一个值countComments。如果上一个值为0,则JSP将为所有记录输出0

因此,您必须分别存储每个StatusUpdate的评论数。例如,在图中:现在

HashMap<StatusUpdate, Integer> counterMap = new HashMap<StatusUpdate, Integer>(); 

for(StatusUpdate statusUpdate: page){ 
    ... 
    int countComments = commentService.countStatusComments(statusUpdate);  
    counterMap.put(statusUpdate, countComments); 
} 
modelAndView.put("counterMap", counterMap); 

,在JSP中你可以在地图的输出值:

<table class="table table-hover">        
    <c:forEach var="statusUpdate" items="${page.content}"> 
     ... 
     <tr> 
      <td> 
       <ul class="post-shares"> 
        <li> 
         <a href="#"> 
          <i class="rounded-x icon-speech"></i> 
          <span>${counterMap[statusUpdate]}</span> 
         </a> 
        </li> 
        <li><a href="#"><i class="rounded-x icon-share"></i></a></li> 
        <li><a href="#"><i class="rounded-x icon-heart"></i></a></li> 
       </ul> 
      </td> 
     </tr>     
    </c:forEach>         
</table> 
+0

完美修复。非常感谢。 – Mike

+0

@Mike欢迎您 –