我正在使用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);
}
public class SomeModel{
private String paramOne;
private String paramTwo;
private String paramThree;
//constructor
//setters and getters
}
//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>
$(document).ready(function() {
//Here i need the model returned using ModelAndView
//I can get data from model and set into div elements.
});
在外部java脚本文件中,是否可以获取模型内容?如果可能的话,我该怎么做?
谢谢!
答案 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)
这种方式有效,通过这种结构,您可以创建自己的框架,并使用较少的样板来完成。
对不起,如果出现一些错误,我会用手机轻轻地写这个
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.7.1</version>
</dependency>
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>
<强> 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>