如何从JavaScript函数中检索Java变量?
我有一个Java类Controller.java
。在控制器中,我可以检索到MySQL数据库并将用户信息保存到列表中。List<User> users = userDAO.findAllUsers();
如何从JavaScript函数中检索Java变量?
到目前为止没有问题。
要检查,我可以
<c:forEach var="user" items="${users}"> <li>${user.id}</li> </c:forEach>
检索index.jsp
users
我也有一个myScripts.js
文件。我写了脚本,并通过导入文件
<script src="myScript.js"></script>
。
到目前为止还没有问题。
我想通过使用user
列表来勾画HighCharts折线图。这意味着,我必须从JavaScript函数中检索Java变量。
我该怎么做? 非常感谢。
有两种方法。
将您的数据打印在js变量中。 var data =“$ {user.id}”;
-
给予每个
<li>
一个id或class属性。 所以你可以通过检索日期。var data1 = document.getElementByID()。value; 。
或jQuery的
$(# '')VAL();
你不能直接在Javascript中获取参数。
Javascript执行客户端,JSP执行服务器端。
使用小脚本,
var codesJS=new Array();
<% String[] codes=(String[])request.getAttribute("users");
if(codes!=null){
for(int i=0; i<codes.length; i++){ %>
var code='<%= codes[i] %>';
codesJS[<%= i %>]=code;
<%}
}%>
使用EL,
var data=${users};
,但不建议混合scriptlet和Java脚本。 scriplets都望而却步了几十年,看到How to avoid Java code in JSP files?
最好是使用JSON
希望这有助于
的Javascript运行在您的浏览器,Java代码部署在容器中(Tomcat)的。
所以调用这个的唯一方法就是通过Web调用。你的javascript应该调用对一个servlet的ajax调用(在web.xml中配置),这个servlet应该调用你的java方法或者使用Native JS调用。
,你可以在你的控制器使用org.json.JSONObject
其他方式返回数据到的JSONObject和使用
JSONArray jArray = new JSONArray();
JSONObject obj = null;
List<User> listUser = userDAO.findAllUsers();
int index = 0;
for (User user : listUser) {
obj = new JSONObject();
obj.put("id", index);
obj.put("text", user);
jArray.put(obj);
}
request.setAttribute("userJsonList", jArray.toString());
HTML中使用得到这个属性,
<input type="hidden" id="jsonData" value="${userJsonList}">
,然后从元素访问值在JavaScript中。
var jsonResponse = jQuery.parseJSON(document.getElementById('jsonData').value);
我想在JavaScript访问Java对象并不好,而不是如果你使用的是Java然后,控制器的JSONObject是您的最佳选择。
您可以使用库将您的列表序列化为JSON。或者没有额外的库,你可以明确地讲出来是这样的:
var list=[
<c:forEach var="user" items="${users}" varStatus="loop">
${user.id}<c:if test="${!loop.last}">,</c:if>
</c:forEach>
];
您可以扩展这种技术,包括其它特性:
var list=[
<c:forEach var="user" items="${users}" varStatus="loop">
{
"id":"${user.id}",
"name":"${user.name}"
}<c:if test="${!loop.last}">,</c:if>
</c:forEach>
];
或者你也可以包括在data-
属性在他的更多信息HTML并从JavaScript以后检索:
<c:forEach var="user" items="${users}">
<li data-userid="${user.id}" data-name="${user.name}">${user.id}</li>
</c:forEach>
而且在JS当你有问题的<li>
一个参考:
var name=li.getAttribute("data-name");
您目前只通过用户标识。 当您在jsp中迭代用户列表时,请包含要绘制的数据。例如(如果有一个公共“getAge()”您的用户类的方法):
<c:forEach var="user" items="${users}">
<li>${user.id}</li>
<input type="hidden" id="${user.id}" value="${user.age}" />
</c:forEach>
如果你正在使用JSP页面,你也可以使用C:出
例如:<c:out value="${user.id}"/>
这应该工作为你
你必须得到你的数组在java code.like这个。
<% ArrayList<String> users = new ArrayList() %>
并将您的用户推入用户arraylist。 then,
<script>
var user= new Array();
<% for (int j=0; j<users.size(); j++) { %>
user[<%= j %>] = "<%= users.get(j) %>";
<% } %>
</script>
Thanx。
如果您正在渲染数据,则不一定需要另一个调用。在jsp中渲染所需的数据似乎更直观。 (当然,取决于数据本身)。 – ne1410s 2014-09-05 12:21:30