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)
public class SomeModel{
private String paramOne;
private String paramTwo;
private String paramThree;
//constructor
//setters and getters
}
Run Code Online (Sandbox Code Playgroud)
//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)
$(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)
Ale*_*isi 16
另一种解决方案可能是在JSP中使用:
<input type="hidden" id="jsonBom" value='${jsonBom}'/>
并使用jQuery获取Javascript中的值:
var jsonBom = $('#jsonBom').val();
我最近遇到了同样的需求.所以我尝试了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)
这种方式有效,通过这种结构,您可以创建自己的框架,并使用较少的样板来完成.
对不起,如果出现了一些错误,我会用手机轻轻地写这个
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.7.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
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)
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)
这是我如何使列表对象可用于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)
| 归档时间: |
|
| 查看次数: |
118238 次 |
| 最近记录: |