2017-06-15 21 views
0

我需要根据数据库中的数据存储动态地绘制表格。当加载第一个网页(validator.jsp)时,它会转到一个数据库并返回一个名为cert的ArrayList。 (证书的描述,价值等)。如何将变量值从javacript设置为JSP?

<% java.util.ArrayList<Certificate> cert = OperacionesVidaDollars.getCertificates();%> 

之后,当页面加载完成后,会调用一个javascript函数(函数drawCertificates)。该函数将绘制与ArrayList所具有的证书一样多的表。

<script type="text/javascript"> 
    window.onload = drawCertificates; 

     function drawCertificates(){ 
      alert("page finish loading, staring to draw certificates"); 
      var i; 
      for(i=0;i<<%=cert.size()%>;i++){ 
       createTable(i); 

       } 
      } 
    </script> 

正如你可以在功能看到创建表中,变量文本是suppost取决于

text = document.createTextNode("<%=cert.get(i).getDescription()%>"); 

为了更新变量改变,我第一次调用JSP setVariable,更新计数器,然后尝试在getDescription中使用它,例如:

text = document.createTextNode("<%=cert.get(request.getAttribute("count")).getDescription()%>"); 

我有这个setVariable.jsp

<% 

int num = Integer.valueOf(request.getParameter("number")); 
request.setAttribute("count", num); 
request.getRequestDispatcher("VidaDollarsCC.jsp").forward(request, response); 

Cookie cookie = new Cookie("countCookie",String.valueOf(num)); 
cookie.setMaxAge(60*60*24); 
response.addCookie(cookie); 
    %> 

在其他JSP(validator.jsp)我是谁应该改变变量值这个javascript函数。

function setVariable(number){ 
alert("setting the number " + number); 
    var xmlhttp = new XMLHttpRequest(); 
      xmlhttp.onreadystatechange = function() { 

     } 
     xmlhttp.open("POST", "setVariable.jsp", true); 
     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xmlhttp.send("number="+number); 


} 

在同一个JSP(validator.jsp)我有这个功能CREATETABLE(uniqID),我需要的是号码被更新取决于uniqID,因为我有有,我想一些信息一个ArrayList被显示。

function createTable(uniqID){ 

    setVariable(uniqID);  
    text = document.createTextNode("<%=cert.get(request.getAttribute("count")).getDescription()%>"); 


    } 

但是不工作。有人知道为什么吗?我该如何解决它?如果您有其他想法可以实施,那也会很棒。

回答

1

我假设你的AJAX调用成功发送numbersetVariable.jsp

1)您必须认识到,AJAX呼叫是一个不同的请求,并且不同于您在validator.jsp页面中的请求。

2)您不能从Javascript编写JSP表达式并将其解析为HTML,因为您的JSP需要由服务器端进行重新处理。

要回答你关于如何解决这个问题,首先我们需要知道你想要做什么。

更新:

1)看起来像uniqIDcount是相同的号码。为什么不在你的javascript中使用uniqID

2)为什么不将证书描述也传递给createTable。像这样:

<% java.util.ArrayList<Certificate> cert = OperacionesVidaDollars.getCertificates(); 

      StringBuilder jsCerts = new StringBuilder("["); 
      boolean first = true; 
      for (Certificate cr : certs){ 
       if (!first) jsCerts.append(","); 
       first = false; 
       jsCerts.append("\"").append(cr.getDescription()).append("\""); 
      } 
      jsCerts.append("]"); 
    %> 

<script type="text/javascript"> 
    window.onload = drawCertificates; 

     function drawCertificates(){ 
      alert("page finish loading, staring to draw certificates"); 
      var certArray = <%=jsCerts.toString()%>; 
      var i; 
      for(i=0;i<certArray.length;i++){ 
       createTable(i, certArray[i]); 

       } 
      } 
    </script> 

function createTable(uniqID, desc){ 

    setVariable(uniqID);  
    text = desc; 


    } 

这里的关键是,你需要编写所有必要的数据到HTML,以便能够在JavaScript中使用它,你不能访问从JavaScript request属性。

+0

嗨@tsolakp。您假设正确,ajax调用成功,我已经调试该部分并且数字发送正确。我已经编辑了我的问题描述来解释我想要做什么。 – mavi