#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)