如何在javascript文件中访问Spring MVC模型对象?

use*_*806 14 javascript java jquery spring spring-mvc

我正在使用spring 3 MVC,我有以下课程.

外部系统将使用以下URL调用我的应用程序:

http://somehost/root/param1/param2/param3
Run Code Online (Sandbox Code Playgroud)

我有一个spring MVC控制器方法如下:

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);
    } 
Run Code Online (Sandbox Code Playgroud)

SomeModel.java

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

}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

externalJs.js

$(document).ready(function() {

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


});
Run Code Online (Sandbox Code Playgroud)

在外部java脚本文件中,是否可以获取模型内容?如果可能的话,我该怎么做?

谢谢!

Aur*_*and 29

JavaScript在客户端运行.您的模型在客户端不存在,它只在您呈现.jsp时存在于服务器端.

如果您希望模型中的数据可用于客户端代码(即.javascript),则需要将其存储在呈现页面中的某个位置.例如,您可以使用Jsp编写JavaScript,将模型分配给JavaScript变量.

更新:

一个简单的例子

<%-- SomeJsp.jsp --%>
<script>var paramOne =<c:out value="${paramOne}"/></script>
Run Code Online (Sandbox Code Playgroud)

  • 第一段让我眼前一亮,让事情变得更加清晰.谢谢. (2认同)

Ale*_*isi 16

另一种解决方案可能是在JSP中使用: <input type="hidden" id="jsonBom" value='${jsonBom}'/>

并使用jQuery获取Javascript中的值:

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


Spl*_*ash 8

我最近遇到了同样的需求.所以我尝试了Aurand的方式,但似乎代码缺少$ {}.所以SomeJsp.jsp里面的代码<head></head>是:

<script>
  var model=[];
  model.paramOne="${model.paramOne}";
  model.paramTwo="${model.paramTwo}";
  model.paramThree="${model.paramThree}";
</script>
Run Code Online (Sandbox Code Playgroud)

请注意,您无法使用var进行model = ${model}分配,因为它将分配java对象引用.所以要在外部JS中访问它:

$(document).ready(function() {
   alert(model.paramOne);
});
Run Code Online (Sandbox Code Playgroud)


Jua*_*ini 7

这种方式有效,通过这种结构,您可以创建自己的框架,并使用较少的样板来完成.

对不起,如果出现了一些错误,我会用手机轻轻地写这个

Maven依赖:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>1.7.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

Java的:

Person.java (Person Object Class)

Class Person {

    private String name;

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

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

}
Run Code Online (Sandbox Code Playgroud)

PersonController.java (Person Controller)

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

视图:

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>
Run Code Online (Sandbox Code Playgroud)

使用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);
});
Run Code Online (Sandbox Code Playgroud)


tOb*_*Obi 5

这是我如何使列表对象可用于javascript的示例:

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>
Run Code Online (Sandbox Code Playgroud)