нулевой объект из Model.AddAttribute в Spring MVC Framework

#java #spring #spring-mvc

#java #весна #spring-mvc

Вопрос:

Я получил нулевой объект из Model.AddAttribute в Spring MVC Framework, который, как ожидается, будет ненулевым списком. Я не знаю, почему сообщения все еще были пустыми после вызова функции getSingle(). Мне нужна помощь…ТАТ, я новичок в SpringMVC Framework.

Код контроллера:

     @RequestMapping("/message/getSingle")
    public String getSingle(@RequestParam Integer userid, HttpSession session, Model model){
        User nowuser = (User)session.getAttribute("user");
        Message message = new Message();
        message.setSenderId(nowuser.getId());
        message.setReceiverId(userid);
        List<Message> messages = messageService.getSingle(message);
        model.addAttribute("messages",messages);
        return "chatroom";
    }
 

Код JavaScript в thechatroom.jsp:

 <body>
    <div class="container">
    <div class="row">
        <span>My Friends</span>
        <ul class="nav nav-tabs nav-pills">
            <li class="nav-item"><a href="#tab1" data-toggle="pill" class="nav-link active" name="SingleFriend" id="0">公共</a></li>
            <c:forEach items="${users}" var="friend">
                <li class="nav-item"><a href="javascript:void(0)" data-toggle="pill" class="nav-link" name="SingleFriend" onclick="getSingle(this,${friend.id})">${friend.username}</a></li>
            </c:forEach>
        </ul>
    </div>
    </div>
        <div id="display"><textarea class="text" readonly="readonly"></textarea></div>
        <input type="text" id="text" class="area"></textarea>
        <button id="send">Send Message</button>
    </ul>
    <script type="text/javascript">
    getSingle=function(obj,userid){
        $.ajax({
            method:'POST',
            url:'${ pageContext.request.contextPath }/message/getSingle',
            data:{"userid":userid},
            success:function(data) {
                var html = "<c:if test='${empty messages}'><textarea id='message' class='text' readonly='readonly'>No messages found</textarea></c:if><c:if test='${not empty messages}'><textarea id='message' class='text' readonly='readonly'><c:forEach items='${messages}' var='message'>${message.sendTime}-${message.text}</c:forEach></textarea></c:if>";
                $("#display").html(html);
            }
        });
    }
    </script>
    </body>
</html>
 

Комментарии:

1. Вы используете ajax, и у вас есть только фрагмент ajax data:{"userid":userid} , поэтому нет модели, которая будет автоматически раздуваться. Ваш ajax отправляет только предоставленные данные на сервер.

2. @Elyas Hadizadeh Спасибо, что мне делать, если я хочу изменить текст в текстовой области? Сообщения содержат данные, извлеченные из базы данных. И мне нужно отобразить информацию в текстовой области. ТАТ

3. Если вы хотите использовать ajax, перед запуском функции ajax получите текущее значение textarea (например, через javascript document.getElementById("TextArea_ID") ), а затем отправьте его в sever (как то, что вы сделали с data …).

4. Лучше создать json и отправить его на контроллер, а затем проанализировать его, но вам нужно найти и узнать, как обрабатывать json в SpringBoot. Вы также можете использовать метод HTTP POST через формы, а не AJAX (найдите, как отправлять данные через формы на контроллер в Springboot :-D)

5. И это хорошая идея для переключения thymeleaf , она намного мощнее, чем предыдущие клиентские технологии для Java (особенно в Spring realm)