web-dev-qa-db-de.com

Wie kann ich auf das Spring MVC-Modellobjekt in der JavaScript-Datei zugreifen?

Ich verwende Spring 3 MVC und ich habe unter Klassen.

Externes System ruft meine Anwendung mit folgender URL auf:

http://somehost/root/param1/param2/param3

Ich habe eine Spring-MVC-Controller-Methode wie folgt:

public ModelAndView showPage(@PathVariable("param1") String paramOne, @PathVariable("param2") String paramTwo, @PathVariable("param3") String paramThree, HttpServletResponse response) {  
        SomeModel model = new SomeModel(paramOne, paramTwo, paramThree);
       return new ModelAndView("SomeJsp", "model", model);
    } 

SomeModel.Java

public class SomeModel{
 private String paramOne;
 private String paramTwo;
 private String paramThree;
//constructor
 //setters and getters

}

SomeJsp.jsp

//In this Jsp i have a div with few elements. Div is not visible by default.
//This jsp has externalJavascript included.
//I enable div and set the data into div elements using jquery.
<script src="<c:url value="/resources/js/extjs.js" />" type="text/javascript"></script>

externalJs.js

$(document).ready(function() {

    //Here i need the model returned using ModelAndView
//I can get data from model and set into div elements.


});

Ist es in einer externen Java-Skriptdatei möglich, den Modellinhalt abzurufen? Wenn möglich, wie kann ich das tun?

Vielen Dank!

12
user755806

Auf der Clientseite wird JavaScript ausgeführt. Ihr Modell ist auf der Clientseite nicht vorhanden. Es existiert nur auf der Serverseite, während Sie Ihre .jsp-Datei rendern.

Wenn Sie möchten, dass Daten aus dem Modell für clientseitigen Code (z. B. Javascript) verfügbar sind, müssen Sie sie irgendwo auf der gerenderten Seite speichern. Beispielsweise können Sie mit Ihrem Jsp JavaScript schreiben, das Ihr Modell JavaScript-Variablen zuordnet.

Update:

Ein einfaches Beispiel

<%-- SomeJsp.jsp --%>
<script>var paramOne =<c:out value="${paramOne}"/></script>
26
Aurand

Eine andere Lösung könnte in JSP verwendet werden: <input type="hidden" id="jsonBom" value='${jsonBom}'/>

und mit jQuery den Wert in Javascript erhalten:

var jsonBom = $('#jsonBom').val();

16

Ich habe vor kurzem das gleiche Bedürfnis gehabt. Also habe ich Aurands Weg ausprobiert, aber anscheinend fehlt $ {} im Code. So ist der Code in SomeJsp.jsp <head></head>is:

<script>
  var model=[];
  model.paramOne="${model.paramOne}";
  model.paramTwo="${model.paramTwo}";
  model.paramThree="${model.paramThree}";
</script>

Beachten Sie, dass Sie var model = ${model} nicht zuweisen können, da eine Java-Objektreferenz zugewiesen wird. Um darauf in externen JS zuzugreifen:

$(document).ready(function() {
   alert(model.paramOne);
});
7
Splash

Dieser Weg funktioniert und mit dieser Struktur können Sie Ihr eigenes Framework erstellen und es mit weniger Boilerplate tun.

Tut mir leid, wenn ein Fehler vorliegt, schreibe ich dies mit meinem Handy

Maven-Abhängigkeit:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>1.7.1</version>
</dependency>

Java:

Person.Java(Personenobjektklasse)

Class Person {

    private String name;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

PersonController.Java(Personensteuerung)

@RestController
public class PersonController implements Controller {

    @RequestMapping("/person")
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        Person person = new Person();
        person.setName("Person's name");
        Gson gson = new Gson();

        ModelAndView modelAndView = new ModelAndView("person");
        modelAndView.addObject("person", gson.toJson(person));

        return modelAndView;
    }
}

Aussicht:

person.jsp

<html>
    <head>
        <title>Person Example</title>
        <script src="jquery-1.11.3.min.js"></script>
        <script type="text/javascript" src="personScript.js"></script>
    </head>
    <body>
        <h1>Person/h1>
        <input type="hidden" id="person" value="${person}">     
    </body>
</html>

Javascript:

personScript.js

function parseJSON(data) {
    return window.JSON && window.JSON.parse ? window.JSON.parse( data ) : (new Function("return " + data))(); 
}

$(document).ready(function() {
    var personJson = $('#person');
    person = parseJSON(personJson.val());
    alert(person.name);
});
7
Juan Furattini

Hier ein Beispiel, wie ich ein Listenobjekt für Javascript zur Verfügung gestellt habe:

var listForJavascript = [];
<c:forEach items="${MyListFromJava}" var="listItem">
  var arr = [];

  arr.Push("<c:out value="${listItem.param1}" />");
  arr.Push("<c:out value="${listItem.param2}" />");

  listForJavascript.Push(arr);
</c:forEach>
3
tObi

Sie können nicht über JavaScript auf Java-Objekte zugreifen, da sich auf der Clientseite keine Objekte befinden. Es empfängt nur eine einfache HTML-Seite (ausgeblendete Felder können hilfreich sein, aber es ist kein guter Ansatz).

Ich schlage vor, ajax und @ResponseBody zu verwenden.

1
Patison

im Controller:

JSONObject jsonobject=new JSONObject();
jsonobject.put("error","Invalid username");
response.getWriter().write(jsonobject.toString());

in Javascript:

f(data!=success){



 var errorMessage=jQuery.parseJson(data);
  alert(errorMessage.error);
}
0
bharath sc