百事通信息网
今天又遇到一个问题,将action得到的记录集(ArrayList)存到request中,再将其转到jsp页面,该页面居然在request中找不到这个记录集,将其存放到servletContext中便可以得到该记录集(^O^).
还是跟往常一样,遇到问题首先想到的是Baidu and Google,不过这次他们二位"仁兄"也帮不上忙,于是去各大论坛求助,唉......了一个多小时,无人问径,郁闷哪!凡事得靠自已呀,经过几个小时的查阅资料,最终问题得以解决,心情舒畅哪!
action中代码片段:
......
ArrayList arlist=(ArrayList)this.ius.getUsers();
request.setAttribute("users", arlist);
return mapping.findForward("success");
......
页面代码片段:
......
<logic:present name="users">
<table>
<logic:iterate id="user" name="users" indexId="number">
<tr>
<td>
<bean:write name="number" />
<bean:write name="user" property="userid" />
<bean:write name="user" property="username" />
</td>
</tr>
</logic:iterate>
</table>
</logic:present>
......
struts配置文件代码片段:
......
<action path="/listUser" type="org.springframework.web.struts.DelegatingActionProxy" validate="false" >
<forward name="success" path="/listUser.jsp" redirect="true" />
</action>
......
问题的关键就出在redirect="true",将值改为false就可以了.
那什么到底有何区别呢?
当元素有redirect=“false”属性或redirect属性不存在的时候,RequestDispatcher.forward(…)被执行;当redirect=“true”是,将调用sendRedirect(…)方法。
--------------------------------------------------------------------------
forward是服务器内部重定向,也就是说服务器得到请求后重定向到本应用的另一个程序(页面),在此过程中并没有通知客户端,所以在跳转的叶面中,request作用域的变量都能生效.
redirect是外部(自已理解的)重定向方式,服务器得到请求后先是通知道客户端,客户端再次发送请求,此时request不被保留.