2014-09-05 56 views
0

我有一個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變量。

我該怎麼做? 非常感謝。

回答

0

有兩種方法。

  1. 將您的數據打印在js變量中。 var data =「$ {user.id}」;

  2. 給予每個<li>一個id或class屬性。 所以你可以通過檢索日期。

    var data1 = document.getElementByID()。value; 。

    或jQuery的

    $(# '')VAL();

0

你不能直接在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

希望這有助於

0

的Javascript運行在您的瀏覽器,Java代碼部署在容器中(Tomcat)的。

所以調用這個的唯一方法就是通過Web調用。你的javascript應該調用對一個servlet的ajax調用(在web.xml中配置),這個servlet應該調用你的java方法或者使用Native JS調用。

+0

如果您正在渲染數據,則不一定需要另一個調用。在jsp中渲染所需的數據似乎更直觀。 (當然,取決於數據本身)。 – ne1410s 2014-09-05 12:21:30

1

,你可以在你的控制器使用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是您的最佳選擇。

0

您可以使用庫將您的列表序列化爲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"); 
0

您目前只通過用戶標識。 當您在jsp中迭代用戶列表時,請包含要繪製的數據。例如(如果有一個公共「getAge()」您的用戶類的方法):

<c:forEach var="user" items="${users}"> 
     <li>${user.id}</li> 
     <input type="hidden" id="${user.id}" value="${user.age}" /> 
    </c:forEach> 
0

如果你正在使用JSP頁面,你也可以使用C:出
例如:<c:out value="${user.id}"/>
這應該工作爲你

1

你必須得到你的數組在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。