2016-04-13 53 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"); 
} 

什麼我試圖做的是從DB獲取保存的消息,並將它們作爲我製作的Message VO的列表返回,然後在jsp上打印出來。 我認爲這是做到這一點的方式,但我不認爲我從控制器獲取清單。我試圖在每個陳述中放置警報(消息),並且它不起作用;沒有警報消息。這意味着我沒有得到控制器的列表。我錯過了什麼嗎?

我添加了jave json-databind依賴項,但這就​​是我關於json的一切。

我只學習了Strut2一個月,最近纔開始使用Spring,所以我一定犯了愚蠢的錯誤,我不知道。請告訴我那是什麼。提前致謝。

+0

什麼是'obj'?你是否得到正確的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因爲在動作方面有getter和setter方法。

在Spring中,有沒有getter和setter方法,所以也許,真的,也許是因爲我只是猜測這裏,這就是爲什麼僅僅使用OBJ工作:

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

您可以添加傑克遜到類路徑中或添加依賴於Maven和Spring MVC的列表轉換成JSON。你只需要添加參數到@RequestMapping生產=「應用程序/ json」,在你的情況下它看起來@RequestMapping(值=「getMessages」,方法= RequestMethod.GET,生產=「應用程序/ JSON」),也參數產生不必要的但推薦的。 而你不需要在你的控制器中進行任何編輯。

相關問題