2016-04-13 7 views
2

Во-первых, это мой контроллер:Как вернуть список объектов из контроллера и отобразить их с помощью JQuery (Spring MVC, Ajax)

@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"); 
} 

Что Я пытаюсь сделать это, чтобы получить сохраненные сообщения из БД и вернуть их как список сообщений VO, которые я сделал, а затем распечатать их на jsp. Я думал, что это был способ сделать это, но я не думаю, что получаю список от контроллера. Я попытался поставить предупреждение (сообщение) внутри каждого утверждения, и это не сработало; нет предупреждающих сообщений. Это означает, что я не получаю список от контроллера. Я что-то упускаю?

Я добавил json json-databind зависимость, но это все, что у меня есть относительно json.

Я только изучил Strut2 в течение месяца и только недавно начал использовать Spring, поэтому я, должно быть, совершил тупую ошибку, о которой я не знаю. Пожалуйста, скажите мне, что это. Заранее спасибо.

+0

Что такое 'obj'? вы получили правильный объект? от контроллера, я думаю, вам нужно преобразовать его в json или в синтаксический анализ обратного вызова как json – uzaif

+0

Это должен быть возвращенный inboxList с контроллера. Так я и делал на Struts2. Полагаю, весной это не работает. Как я могу сделать этот разбор в успешном обратном вызове или преобразовать его в json в контроллере? – SunSun

+0

Вы попробовали 'console.log (obj)' в успешном обратном вызове – uzaif

ответ

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); 
     }); 


     } 
+0

И все. Спасибо за ваш ответ. – SunSun

0

Проблема решена. В отличие от Struts2, я не должен делать так:

$(obj.inboxList).each(function(i, item){ 

Я думаю, что в Struts2 я должен был поставить obj.inboxList, потому что на стороне действия есть геттер и сеттеры.

Весной, нет геттерные и сеттеры так что, возможно, на самом деле, может быть, потому что я просто предполагаю здесь, поэтому просто использовать OBJ работы:

$(obj).each(function(i, item){ 
0

Вы можете добавить Джексона в свой путь к классам или добавить зависимости в Maven и Spring MVC преобразовать список JSON. Вам нужно только добавить параметр в @RequestMapping, чтобы получить = "application/json", в вашем случае он выглядит @RequestMapping (value = "getMessages", method = RequestMethod.GET, производит = "application/json"), также параметр создает ненужные, но рекомендуемые. И вам не нужно редактировать в контроллере.

Смежные вопросы