我正在使用Model2练习Dynamic Web Project。我发现当我在JavaScript中使用JSP scriptlet进行循环时。 scriptlet<%...%>只运行一次。我认为它应该像JS for循环那样运行多少时间。怎么会发生这种情况?我该怎么做才能解决它?
联络点:
<script language='javascript'>
var table = document.getElementById("myTable");
for(i=1;i<=<%=arrLen%>;i++)
{
var row = table.insertRow(i-1);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
cell1.innerHTML = <%=i%>;
cell2.innerHTML = <%=list.get(i)%>;
<% i=i+1;
System.out.println("i="+i);%>
}
</script>
详细信息:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%@ page import=" java.util.List,
java.util.ArrayList" %>
<div>
<h1>Result</h1>
<table id="myTable"></table>
<br>
</div>
<p>There are <%=request.getAttribute("result_number") %> results.</p>
<%
int arrLen = (int)request.getAttribute("result_number");
List<String> list = new ArrayList<String>();
int i;
for(i=1;i<=arrLen;i++)
{
list.add((String)request.getAttribute("result"+i));
System.out.println("Test list:"+list.get(i-1));
}
i=1;
%>
<script language='javascript'>
var table = document.getElementById("myTable");
for(i=1;i<=<%=arrLen%>;i++)
{
var row = table.insertRow(i-1);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
cell1.innerHTML = <%=i%>;
cell2.innerHTML = <%=list.get(i)%>;
<% i=i+1;
System.out.println("i="+i);%>
}
</script>
</body>
</html>
测试清单:COLD
测试清单:123
测试清单:321
测试清单:222
测试清单:123123
测试清单:123
测试清单:123
测试清单:1111111111111
测试清单:123
i = 2
答案 0 :(得分:0)
我想我得到了为什么它只运行一次的答案。 这是因为JSP在后端运行而JavaScript在前端运行。 这样,当您的Web容器将其转换为servlet时 这个原始的jsp可能是这样的。
cell1.innerHTML = <%=i%>;
cell2.innerHTML = <%=list.get(i)%>;
但是servlet会生成一个像这样的HTML
cell1.innerHTML = 1;
cell2.innerHTML = 123;
这就是我得到这样结果的原因。
所以代码应该重写为:
<script language='javascript'>
var table = document.getElementById("myTable");
var bound =<%=arrLen%>;
<%
for(int j=0; j<list.size(); j++)
{
%>
var row = table.insertRow(<%=j%>);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
cell1.innerHTML = '<%=j+1%>';
cell2.innerHTML = '<%=list.get(j)%>';
<%
}
%>
</script>