首先,这是我的控制器:
@Controller
public class MainController {
@Autowired
SqlSession sqlSession;
@Autowired
Message messageVO;
@RequestMapping(value="getMessages", method=RequestMethod.GET)
public @ResponseBody List<Message> getMessages(HttpSession session){
JbuserDAO dao = sqlSession.getMapper(JbuserDAO.class);
List<Message> inboxList = null;
String logedinUserId = (String) session.getAttribute("loginId");
inboxList = dao.getInboxList(logedinUserId);
System.out.println(inboxList); //I do get the list here so it's not sql problem. I think.
return inboxList;
}
这是我的JQuery:
$(function(){
viewingInbox();
$("#viewInbox").on('click', function(){
viewingInbox();
});
});
function viewingInbox(){
$.ajax({
url: "getMessages"
, method: "GET"
, dataType: "JSON"
, contentType: "application/json; charset=UTF-8"
, success: function(obj){
alert(obj.inboxList); //I get undefined here
messageInbox(obj);
}
});
}
function messageInbox(obj){
var list = '<div>';
$(obj.inboxList).each(function(i, item){
list = list + '<article class="media">'
+ '<span class="pull-left"><input type="checkbox" class="checkboxes"></span>'
+ '<span class="pull-left thumb-sm"><img src="resources/images/a2.png" alt="..."></span>'
+ '<div class="media-body">'
+ '<div class="pull-right media-xs text-center text-muted">'
+ '<strong class="h4">12:18</strong><br></div>'
+ '<a href="#" class="h4">123'+item.sendidjbuser+'</a>'
+ '<small class="block m-t-sm">'+item.message+'</small></div></article>'
});
list = list + '</div>';
alert(list); //here I get only <div></div>
$("#inboxDiv").html(list);
alert("messageInbox end");
}
我尝试做的是从DB获取保存的消息并将其作为我制作的消息VO列表返回,然后在jsp上打印出来。 我认为这是做到这一点的方法,但我不认为我从控制器获取列表。我尝试在每个声明中加入警告(消息),但它没有起作用;没有警报信息。这意味着我没有从控制器获取列表。我错过了什么吗?
我添加了json-databind依赖项,但这是我对json所做的一切。
我只学了Strut2一个月,最近才开始使用Spring,所以我一定犯了一些我不知道的愚蠢错误。请告诉我那是什么。提前谢谢。
答案 0 :(得分:0)
问题解决了。与Struts2不同,我不必这样做:
$(obj.inboxList).each(function(i, item){
我认为在Struts2中我必须放置obj.inboxList,因为在动作方面有getter和setter。
在春天,没有吸气剂和吸尘器,所以也许,真的可能是因为我只是在这里猜测,这就是为什么只使用obj工作:
$(obj).each(function(i, item){
答案 1 :(得分:0)
您可以使用ResponseEntity作为返回元素,也可以将列表转换为json列表,以便jquery可以将其解释为迭代元素。
@RequestMapping(value="getMessages", method=RequestMethod.GET)
public ResponseEntity<String> getMessages(HttpSession session){
JbuserDAO dao = sqlSession.getMapper(JbuserDAO.class);
List<Message> inboxList = null;
String logedinUserId = (String) session.getAttribute("loginId");
inboxList = dao.getInboxList(logedinUserId);
com.google.gson.Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String jsonString = gson.toJson(inboxList);
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type", "text/html; charset=utf-8");
return new ResponseEntity<String>(jsonString, responseHeaders, HttpStatus.CREATED);
}
这样您就可以获得所需的邮件列表。 P.S:我还没有通过你的其余代码。但是下面这样的事情应该有效:
success: function(obj){
$.each(obj, function(index) {
alert(obj[index].sendidjbuser);
alert(obj[index].message);
});
}
答案 2 :(得分:0)
您可以将Jackson添加到类路径中或向maven添加依赖项,Spring Mvc将列表转换为json。您只需要将参数添加到@RequestMapping produce =&#34; application / json&#34;,在您的情况下它看起来像@RequestMapping(值=&#34; getMessages&#34;,method = RequestMethod.GET,产生=&# 34; application / json&#34;),参数也产生不必要但推荐。 而且您不需要在控制器中进行任何编辑。