我需要根据数据库中的数据存储动态绘制一张表。加载第一个网页(validator.jsp)时,它将转到数据库并返回一个名为cert的ArrayList。 (cert hast描述,值等)。
<% 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)看起来uniqID
和count
是相同的数字。为什么不只在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/