今天练习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中读取不到
在百度上搜了一下, 没有得到相关的结论, 所以把思考写出来, 奇文共欣赏, 疑义相与析. 希望各路大神能够不吝教导~~~给我释疑解惑一下