如何在Spring MVC中显示EL中的现有值和新创建的值?

时间:2017-11-30 01:35:32

标签: spring jsp spring-mvc jstl el

只有模型的最后一个值显示为EL,因此不显示现有值。

BoardController代码。

@RequestMapping("viewPage.do")
public String viewPage(HttpSession session,HttpServletRequest request, HttpServletResponse response,Model model, 
        @RequestParam(value="board_idx", defaultValue="0") int board_idx) throws IOException,IllegalStateException
{
    // View comment list for this post
    List<HashMap<String, Object>> commentList= bService.getBoardForComment(boardData.getBoard_idx());

    // loop (comment.size)
    for(int i = 0; i < commentList.size(); i++)
    {
        System.out.println("commentList Size : " + commentList.size());
        //Saving the board_comm_idx value in the commentList to a variable
        int board_comm_idx= (Integer) commentList.get(i).get("board_comm_idx");
        //System.out.println("board_comm_idx : " + board_comm_idx);

        // View comments in comments (viewed by board_idx, board_comm_idx)
        List<HashMap<String, Object>> getCommentOfCommentList = 
                bService.getBoardCommentOfComment(board_idx, board_comm_idx);

            model.addAttribute("cocList", getCommentOfCommentList);
            System.out.println("GetCommentOfCommentList : " + getCommentOfCommentList);
            System.out.println("cocList (Model) : " + model);
    }

    model.addAttribute("commentList", commentList); // CommentList Information
    return "viewPage";
}

这是JSP代码。

<c:forEach items="${cocList}" var="cocList">
    <div class="commentList" style="margin-left:70px">
        <div class="what">
            <div class="nickname">
                <span>
                    ${cocList.board_c_of_c_writer}
                </span>
            </div>
            <div class="writedatezone" style="margin-left: 715px;">
                <span class="era">
                    <span class="glyphicon glyphicon-time enterReReply"></span>
                    <span class="commentWriteDate">
                        <fmt:formatDate value="${cocList.board_c_of_c_writeDate}" pattern="yyy-MM-dd"/>
                    </span>
                 </span>
             </div>
             <c:if test="${cocList.idx == idx}">
                 <div class="duzone">
                    <span class="deleteOrUpdateComment">
                        <a class="updateComment">수정</a>
                        <a class="deleteComment" onclick="deleteCoc(${cocList.board_idx},${cocList.board_c_of_c_idx})">삭제</a>
                        <input type="hidden" value="${cocList.board_comm_idx}">
                        <input type="hidden" value="${cocList.board_c_of_c}">
                        <input type="hidden" name="board_idx" value="${boardInformation.board_idx}">
                    </span>
                 </div>
                </c:if>
            </div>
            <pre>${cocList.board_c_of_c_content}</pre>
    </div>
</c:forEach>

首先,它是您第一次评论评论的日志。

GetCommentOfCommentList : [{board_idx=3, board_c_of_c_writer=웹개발자, board_c_of_c_content=Test, board_c_of_c_idx=8, board_comm_idx=5, idx=4, board_c_of_c_writeDate=2017-11-30 10:33:06.0}]
cocList (Model) : {cocList=[{board_idx=3, board_c_of_c_writer=웹개발자, board_c_of_c_content=Test, board_c_of_c_idx=8, board_comm_idx=5, idx=4, board_c_of_c_writeDate=2017-11-30 10:33:06.0}]}

之后,如果您发表新评论,

GetCommentOfCommentList : [{board_idx=3, board_c_of_c_writer=웹개발자, board_c_of_c_content=Test, board_c_of_c_idx=8, board_comm_idx=5, idx=4, board_c_of_c_writeDate=2017-11-30 10:33:06.0}]
cocList (Model) : {cocList=[{board_idx=3, board_c_of_c_writer=웹개발자, board_c_of_c_content=Test, board_c_of_c_idx=8, board_comm_idx=5, idx=4, board_c_of_c_writeDate=2017-11-30 10:33:06.0}]}
GetCommentOfCommentList : []
cocList (Model) : {cocList=[]}

如上所述,当您创建新评论时,评论列表将从现有评论中消失。

最后一个cocList是一个空字符串,因为您没有评论该评论。

我确信EL是错的。如何修复EL以解决我的问题?

2 个答案:

答案 0 :(得分:2)

即使你有

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

cocList是您的列表(模型属性)的引用,但由于您将其分配给其他内容var="cocList",您将产生意想不到的后果,您应该将列表项命名为其他内容。

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

然后,您应该能够引用${item.blah}

之类的项目

想想

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

作为

for (Object cocList : cocList) {
   ...
}

这显然很糟糕,而不是你想要的:

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

for (Object item : cocList) {
   ...
}

我认为应该解决你的问题。

对于它的价值,很可能,你没有使用EL或SpEL,你现在正在使用JSTL。通常情况下,SpEL标记看起来像spring:...c:...通常引用JSTL。

答案 1 :(得分:0)

我解决了这个问题。

我将getCommentofCommentList添加到commentList而不是修改查询语句。

如下。

    for(int i = 0; i < commentList.size(); i++)
    {
        System.out.println("commentList Size : " + commentList.size());
        // commentList 에 담긴 board_comm_idx  값을 변수에 저장
        int board_comm_idx= (Integer) commentList.get(i).get("board_comm_idx");
        //System.out.println("board_comm_idx : " + board_comm_idx);

        // 댓글에 댓글 조회 (board_idx , board_comm_idx으로 조회)
        List<HashMap<String, Object>> getCommentOfCommentList = 
                bService.getBoardCommentOfComment(board_idx, board_comm_idx);

        commentList.get(i).put("cocList", getCommentOfCommentList);
    }

我添加了以下代码。

commentList.get(i).put("cocList", getCommentOfCommentList)

结果,这是非常好的工作。