在使用struts自带标签<logic:iterate>来遍历集合以显示到页面上时遇到这样的错误:
javax.servlet.jsp.JspException: Cannot find bean: "typeList" in scope: "request"
在jsp页面中相关的代码如下:
在该jsp页面所对应的action中,代码如下:
根据报错消息,在request作用域中没有找到bean:typeList,但我在action中明明设置了该属性,并且<logic:iterate>的使用也是中规中矩,各属性都设置正确。因此对该bean的设置是没有问题的。上网查了一下该问题,有的网友给出解决方案:不用request而使用session作用域,试了一下果然可行。那么问题的产生就是因为所设置的作用域了。但是为了把变量传到下一个页面而使用session作用域,会无故增大变量的作用域,这不是什么好的解决办法。为什么使用request作用域不行呢?
仔细检查了半天,终于发现了问题的所在,原来是这一句:
return new ActionForward(forward.getPath(),true);
为了防止刷新页面而导致的重复提交,我在action中使用了如上的重定向方法。而重定向会使以前的request中存放的变量全部失效,并进入一个新的request作用域。这样一来,显然就找不到bean了。
因此,解决办法有两个:1、不用重定向语句,防止重复提交用别的办法来实现,这需要一个方重复提交的方法。2、使用session作用域。
不知还有什么别的方法呢。。。