2014-06-12 78 views
0

我從會話中得到一個字符串數組,我想從數組中顯示字符串。jsp:如何從會話中獲取價值?

我知道javascript無法直接從會話中獲取數據。有什麼方法可以從會話中獲取數據並將其傳輸到javascrip?

我的代碼如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<%String[] sele = (String[])session.getAttribute("selections");%>; 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<meta http-equiv="Expires" content="0"> 
<meta http-equiv="kiben" content="no-cache"> 
<title>Check List</title> 
<script language="javascript" type="text/JavaScript" src="cookie.js"> 
</script> 
<script text="text/javascript"> 
    { 
     var selections = //String array form session 
     for(var v=0;v<selections.length;v++){ 
      fillForm(selections[v]); 
     }   
    } 

     function fillForm(name){ 
      var checkbox= document.createElement("input"); 
      checkbox.type="checkbox"; 
      checkbox.name=name; 
      checkbox.value=name; 
      checkbox.id=name; 

      var label = document.createElement("label"); 
      label.htmlFor="id"; 
      label.appendChild(document.createTextNode(name)); 

      var container = document.getElementById("checklist"); 
      container.appendChild(checkbox); 
      container.appendChild(label); 
      container.appendChild(document.createElement("br")); 


     } 

      function submitAction(){ 
       addUserName(document.getElementById("checklist")); 
       var elem = document.getElementById("checklist").elements;   
       for(i =0;i<elem.length;i++){ 
       elem[i].checked = true;     
       } 
       var form = document.getElementById("checklist"); 
       form.submit(); 
      } 

</script> 
</head> 
<body> 
    <form id="checklist" action="selection"> 
    </form> 
    <Button type="button" onclick="submitAction()" name="submit">Submit</button> 

</body> 
</html> 
+0

你真的不「通」變量的JavaScript這麼多,因爲它們打印到它。 – developerwjk

回答

2

只需使用JSP Expression LanguageJSP JSTL

<script> 
     alert("value: ${selections}"); 
</script> 

這裏selections是在任何範圍內頁,請求,會話或應用程序中設置的屬性。

您可以直接訪問屬性形式的會話範圍:

{sessionScope.selections} 

注:我不知道Java的ArrayList確實在JavaScript中正常工作。如果它不起作用,那麼簡單地將一個逗號分隔的字符串設置爲會話屬性,然後將其拆分爲JavaScript,如下所示。

樣品的編號:

<script> 
    var selections = "${sessionScope.csv}".split(","); 
    for (var v = 0; v < selections.length; v++) { 
     alert(selections[v]); 
    } 
</script> 

這裏csv是在會話範圍設定用逗號分隔的字符串值。


使用JSP JSTL和EL,而不是Scriplet是更易於使用,並且不容易出錯。

您可以在不使用JavaScript的情況下在JSTL中實現它。只需使用<c:forEach>標記遍歷列表並添加大量的複選框和標籤。

示例代碼:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
... 
<body> 
... 
    <c:forEach items="${selections }" var="name"> 
     <input type="checkbox" name="${name}" value="${name}" id="${name}"> 
     ... 
    </c:forEach> 
</body>