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

时间:2014-03-19 14:19:06

标签: java javascript jquery spring spring-mvc

我正在使用spring 3 MVC,我的课程已经不足了。

外部系统会使用以下网址调用我的应用程序:

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

我有一个弹簧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);
    } 

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.


});

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

谢谢!

8 个答案:

答案 0 :(得分:27)

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

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

<强>更新

一个简单的例子

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

答案 1 :(得分:16)

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

使用jQuery获取Javascript中的值:

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

答案 2 :(得分:8)

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

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

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

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

答案 3 :(得分:7)

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

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

Maven依赖:

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

的Java:

Person.java (人物对象类)

Class Person {

    private String name;

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

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

}

PersonController.java (人事控制人)

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

查看:

<强> 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);
});

答案 4 :(得分:4)

以下是我如何为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>

答案 5 :(得分:1)

您无法从JavaScript访问java对象,因为客户端没有对象。它只接收纯HTML页面(隐藏字段可以帮助,但它不是很好的方法)。

我建议你使用ajax和@ResponseBody

答案 6 :(得分:0)

在控制器中:

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

在javascript中:

f(data!=success){



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

答案 7 :(得分:0)

   @RequestMapping("/op")
   public ModelAndView method(Map<String, Object> model) {
       model.put("att", "helloooo");
       return new ModelAndView("dom/op");
   }

在您的.js中

<script>
    var valVar = [[${att}]];
</script>