如何从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.jspusers我也有一个myScripts.js文件。我写了脚本,并通过导入文件

<script src="myScript.js"></script>

到目前为止还没有问题。

我想通过使用user列表来勾画HighCharts折线图。这意味着,我必须从JavaScript函数中检索Java变量。

我该怎么做? 非常感谢。

有两种方法。

  1. 将您的数据打印在js变量中。 var data =“$ {user.id}”;

  2. 给予每个<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调用。

+0

如果您正在渲染数据,则不一定需要另一个调用。在jsp中渲染所需的数据似乎更直观。 (当然,取决于数据本身)。 – ne1410s 2014-09-05 12:21:30

,你可以在你的控制器使用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。