今天练习jstl标签的时候发现一个有意思的问题:
题目要求:在tag1.jsp中往request中绑定一个list, 在tag2.jsp中读取list输出
我的代码:
tag1.jsp中的js函数
function toNextPage(){
<%
List<String> list = new ArrayList<String>();
list.add("first");
list.add("second");
list.add("third");
request.setAttribute("list", list);
request.getRequestDispatcher("tag2.jsp").forward(request, response);
%>
//document.location = "tag2.jsp";
}
tag2.jsp中的代码:
<c:forEach var="i" begin="1" end="5" step="2">
${i }<br>
</c:forEach>
<c:forEach items="${requestScope.list }" var="str">
${ str}<br>
</c:forEach>
<%
List<String> list = (List)request.getAttribute("list");
for(String s : list){
%>
<%=s %><br>
<%
}
%>
运行结果:
在tag1.jsp中使用document.location方式跳转的话, 在tag2.jsp中不论是jstl方式还是java方式都不会读出任何数据; 如果使用request.getRequestDispatcher("tag2.jsp").forward(request, response);方式转发的话, 在tag2.jsp中不论是jstl还是java都能读取到正确的数据.
由此猜想: document.loaction=”” 这种方式跳转的话, 是否就不是一次请求了呢? 所以在request中绑定的数据在tag2.jsp中读取不到
在百度上搜了一下, 没有得到相关的结论, 所以把思考写出来, 奇文共欣赏, 疑义相与析. 希望各路大神能够不吝教导~~~给我释疑解惑一下