2017-01-19 3 views
0

Diese Frage aus Returning ModelAndView in ajax spring mvcAjax POST Aufruf Spring MVC

wird folgen Als einzige Antwort sagt, dass wir json von Kontrolleur Modelandzurückkommen müssen. So ist die Frage

  1. was kann getan werden, um ModelAndView zurückzugeben?
  2. Wie die Seite gerendert werden: -
    • wird es in Erfolg Abschnitt von Ajax-Aufruf
    • oder Feder-Controller gehandhabt werden müssen in der Regel die Seite zurückkehren, wie es in Spring MVC
    • tut
  3. Wie die Postdaten von Ajax im Controller gelesen werden können.

Update 1: Wie erläutert wurde, habe ich versucht, Beispiel. Hier ist mein Code.

In der obigen Controller-Methode kann ich Daten erfolgreich erhalten. Diese Methode wird von einem Javascript auf home.html aufgerufen. Unten ist JavaScript-Funktion

function callGreeting(){ 
      var nameData={ 
        name : document.getElementById("name").value 
       } 
      var dataInJson = JSON.stringify(nameData); 
      var csrf_token = document.getElementById("token").value; 
      $.ajax({ 
      type: 'POST', 
      url: "greeting", 
      data: dataInJson, 
      cache:false, 
      beforeSend: function(xhr) { 
       xhr.setRequestHeader('X-CSRF-Token', csrf_token); 
       xhr.setRequestHeader("Accept", "application/json"); 
       xhr.setRequestHeader("Content-Type", "application/json"); 
      }, 
      success: function (response) { 
       document.open(); 
       document.write(response); 
       document.close(); 
      }, 
      error: function (data) { 
       alert("failed response"); 
      } 
     }); } 

Ich habe die Seite erfolgreich gerendert. Die URL der Anwendung ändert sich jedoch nicht von AjaxSpringMVC: 8080/home zu AjaxSpringMVC: 8080/gruß, auch nachdem die neue Seite geladen wurde. Dies geschieht in Spring MVC bei Verwendung ohne Ajax.

Antwort

0

was kann getan werden, um ModelAndView zurückzugeben?

Sie können Modeland zurückkehren Wie üblich:

public ModelAndView returnView(Model model) { 
    model.addAttribute("myStaff", "my staff as string"); 

    return new ModelAndView("myView"); 
} 

Wie die Seite gerendert wird:

Sie steuern, wie es gemacht wird. Wenn Sie ModelAndView zurückgeben, hat die Antwort eine HTML-Seite. Nach dem Ajax-Aufruf können Sie $("#container").html(response) oder etwas ähnliches tun, um die HTML-Seite wo immer Sie wollen anzuzeigen.

Mit anderen Worten, Sie erhalten eine ganze HTML-Seite des Inhalts von der Steuerung.

Ich empfehle jedoch, dass Sie nur Json-Objekt zurückgeben und Ihre Ansicht mit dem Json-Objekt aktualisieren. Ajax wird hauptsächlich verwendet, um eine gute Benutzererfahrung zu erzeugen, indem ein Teil der Ansicht asynchron aktualisiert wird. Daher macht es für mich keinen Sinn, eine ganze Seite mit Ajax zu erstellen.

Wie die Post-Daten von Ajax in Controller gelesen werden können.

Es gibt viele Möglichkeiten, Ich mag json Körper direkt an den Controller

@ResponseBody 
@RequestMapping(value = "/saveObj", method = RequestMethod.POST, consumes = "application/json") 
public String saveObj(Model model, @RequestBody MyObj myObj) { 
    // do staff.. 
} 
+0

Aktualisiert Anfrage mit Details senden. Ich habe versucht, wie Sie vorgeschlagen, d. H. Rendering ganze HTML-Seite, aber URL ändert sich nicht, keine Vorschläge .. bitte? –

+1

URL soll nicht geändert werden, weil der Ajax-Code auf der Seite ausgeführt wird, die die Anfrage ausführt, und Sie nicht explizit JavaScript zum Umleiten verwendet haben. Bitte benutze keine Ajax um Redirect zu machen. Wenn Sie Redirect machen wollen, entfernen Sie den Ajax-Code und 'return redirect:/anotherView '' in Ihrem Controller. –

+0

Perfekt. Das ist das gleiche, an das ich gedacht habe. Leider können wir weder Ajax noch Spingmvc ausschließen. –