Reputation: 6815
I am using spring 3 MVC and i have below classes.
External system would call my application using below URL:
http://somehost/root/param1/param2/param3
I have a spring MVC controller method as below:
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.
});
In external java script file, is it possible to get the model content? If possible, how can i do that?
Thanks!
Upvotes: 17
Views: 143820
Reputation: 21
I have used a hidden tag and passed object to js.
<input type="hidden" id="jsonBom" value='${jsonBom}'/>
you can access value of the tag using id
Upvotes: 0
Reputation: 189
@RequestMapping("/op")
public ModelAndView method(Map<String, Object> model) {
model.put("att", "helloooo");
return new ModelAndView("dom/op");
}
In your .js
<script>
var valVar = [[${att}]];
</script>
Upvotes: 0
Reputation: 1
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);
}
Upvotes: 0
Reputation: 803
This way works and with this structure you can create your own framework and do it with less boilerplate.
Sorry if some error is present, I'm writing this handly with my cellphone
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.7.1</version>
</dependency>
Person.java (Person Object Class)
Class Person {
private String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
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;
}
}
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);
});
Upvotes: 8
Reputation: 2684
Another solution could be using in JSP:
<input type="hidden" id="jsonBom" value='${jsonBom}'/>
and getting the value in Javascript with jQuery:
var jsonBom = $('#jsonBom').val();
Upvotes: 20
Reputation: 5537
JavaScript is run on the client side. Your model does not exist on the client side, it only exists on the server side while you are rendering your .jsp.
If you want data from the model to be available to client side code (ie. javascript), you will need to store it somewhere in the rendered page. For example, you can use your Jsp to write JavaScript assigning your model to JavaScript variables.
Update:
A simple example
<%-- SomeJsp.jsp --%>
<script>var paramOne =<c:out value="${paramOne}"/></script>
Upvotes: 33
Reputation: 1288
I recently faced the same need. So I tried Aurand's way but it seems the code is missing ${}. So the code inside SomeJsp.jsp <head></head>
is:
<script>
var model=[];
model.paramOne="${model.paramOne}";
model.paramTwo="${model.paramTwo}";
model.paramThree="${model.paramThree}";
</script>
Note that you can't asssign using var model = ${model}
as it will assign a java object reference. So to access this in external JS:
$(document).ready(function() {
alert(model.paramOne);
});
Upvotes: 11
Reputation: 1942
Here is an example of how i made a list object available for 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>
Upvotes: 5
Reputation: 2651
You can't access java objects from JavaScript because there are no objects on client side. It only receives plain HTML page (hidden fields can help but it's not very good approach).
I suggest you to use ajax and @ResponseBody
.
Upvotes: 1