繁体   English   中英

如何设置从javascript到JSP的变量值?

[英]How to set variable value from javascript to JSP?

我需要根据数据库中的数据存储动态绘制一张表。 加载第一个网页(validator.jsp)后,它将转到数据库并返回一个名为cert的ArrayList。 (证书急需描述,值等)。

 <% 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>

正如您在函数创建表中看到的那样,变量文本是后缀,要根据i进行更改

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

为了更新该变量i ,我首先调用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)中,我具有此函数来创建table(uniqID),其中我需要根据uniqID更新数字,因为我有一个ArrayList,其中包含一些我想显示的信息。

function createTable(uniqID){

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


    }

但是没有用。 有人知道为什么吗? 我该如何解决? 如果您有其他可以实施的想法,那也很好。

我假设您的AJAX呼叫已成功将number发送到setVariable.jsp

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

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

要回答有关如何解决此问题的问题,我们首先需要知道您要做什么。

更新:

1)看起来uniqIDcount是相同的数字。 为什么uniqID在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属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM