一尘不染

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

jsp

仅将模型的最后一个值显示为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以解决我的问题?


阅读 271

收藏
2020-06-10

共1个答案

一尘不染

即使你有

<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。

2020-06-10