2016-04-13 4 views
2

zuerst angezeigt werden, das ist mein Controller:Wie Liste der Objekte von der Steuerung zurückzukehren und sie mit 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; 
} 

und das ist mein 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"); 
} 

Was Ich versuche, gespeicherte Nachrichten von DB zu bekommen und sie als eine Liste von Nachricht VO, die ich gemacht habe, zurückzugeben und sie dann auf jsp auszudrucken. Ich dachte, das wäre der Weg, aber ich glaube nicht, dass ich die Liste vom Controller bekomme. Ich habe versucht, eine Warnung (Nachricht) in die einzelnen Anweisungen einzufügen, und es hat nicht funktioniert. keine Warnmeldungen Das heißt, ich bekomme die Liste nicht vom Controller. Fehle ich etwas?

Ich Jave Json-Databind Abhängigkeit hinzugefügt, aber das ist alles, was ich über Json habe.

Ich habe Strut2 erst einen Monat lang gelernt und erst vor kurzem mit Spring angefangen, also muss ich einen dummen Fehler gemacht haben, den ich nicht kenne. Bitte sag mir, was das ist. Danke im Voraus.

+0

was ist 'obj'? hast du richtiges obj bekommen? von Controller ich denke, Sie müssen es zu json oder in Erfolgs-Callback als json konvergieren – uzaif

+0

Das sollte die zurückgegebene InboxList vom Controller sein. So habe ich das bei Struts2 gemacht. Ich denke, im Frühling funktioniert das nicht so. Wie mache ich das Parsen im Erfolgsrückruf oder wandeln Sie es in json im Controller um? – SunSun

+0

haben Sie versuchen, console.log (obj) in Erfolg Rückruf – uzaif

Antwort

0

Sie können ResponseEntity als Rückstellelement verwenden und kann auch Konvertiere deine Liste in eine json-Liste, so dass jquery sie als iteratives Element interpretieren kann.

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


    } 

Auf diese Weise erhalten Sie definitiv Liste Ihrer Nachricht, wie Sie möchten. PS: Ich habe Ihren Rest des Codes nicht durchgearbeitet. Aber die Dinge wie die folgenden funktionieren sollen:

success: function(obj){ 

$.each(obj, function(index) { 
      alert(obj[index].sendidjbuser); 
      alert(obj[index].message); 
     }); 


     } 
+0

Und es tat. Vielen Dank für Ihre Antwort. – SunSun

0

Problem gelöst. Im Gegensatz zu Struts2, musste ich nicht so tun:

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

Ich denke, in Struts2 ich denn auf der Aktionsseite setzen obj.inboxList hatte es Getter und Setter.

Im Frühjahr gibt es keine Getter und Setter so vielleicht, wirklich vielleicht, weil ich hier nur raten bin, deshalb nur mit obj funktioniert:

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

Sie können Jackson in dem Classpath oder Abhängigkeiten in der maven und Spring MVC Ihre Liste json konvertieren. Sie brauchen nur hinzufügen Parameter zu @RequestMapping produziert = "application/json", in Ihrem Fall sieht es @RequestMapping (value = "getMessages", Methode = RequestMethod.GET, produziert = "application/json"), auch Parameter erzeugt unnötige aber empfohlen. Und Sie brauchen keine Bearbeitung in Ihrem Controller.

Verwandte Themen