JS for script里面的JSP scriptlet

时间:2016-05-06 06:25:54

标签: javascript jsp

我正在使用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>

详细信息:

JSP

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

结果页面

enter image description here

控制台

测试清单:COLD
测试清单:123
测试清单:321
测试清单:222
测试清单:123123
测试清单:123
测试清单:123
测试清单:1111111111111
测试清单:123
i = 2

1 个答案:

答案 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>