gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:51:49 26 4
gpt4 key购买 nike

我需要根据数据库中的数据存储动态绘制表格。当加载第一个网页 (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>

正如您在函数创建表中看到的,变量 text 支持根据 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)中,我有这个函数来createTable(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 是相同的数字。为什么不在 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 属性。

关于javascript - 如何从 javascript 设置变量值到 JSP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44571976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com