Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30392358
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2008-04-09 09:25:29

碰到actioncjsp传值的问题,开始以为自己编写程序有问题,检查了几天都没解决,网上的解决方案也不可行。直到今天在网上找到一个可行的解决方案,现在总结如下:

问题:

Action中使用request.setAttribute("key", Value)的方式设置属性,在通过return mapping.findForward("Forwards")方式跳转,但在对应的JSP页面中无得取得传过来的属性值。

原因:

由于request生命周期只在一次请求范围内有效的,所以如果使用了struts-action 中的Reditect设置的话,就会将请求重定向,也就是破坏了request生命周期,重新产生一次请求,那么在jsp页面中,request.setAttribute设置过的属性被清空了。

解决:

在新建Action时,在选择Forwards时,不要选择“Redirect”,或者在struts-config.xml配置文件中,将对应标签中的标签中,设置“Redirect”值为false即可。

测试:下面是我项目中的举例

1、 ListMarket.java中部分代码如下:

        public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {

       // 列出所有Market的信息

       MarketService ms = new MarketService();

       List listMarket = (List) ms.findAllMarket(); //从业务层取得LIST

       request.setAttribute("listMarket", listMarket);

       return mapping.findForward("success");

}

2、 Struts-config.xml中的设置如下:

       <action path="/listMarket"

           type="com.sailor.struts.action.ListMarketAction" scope="request">

           <forward name="success" path="/list.jsp" redirect="false" />

       action>

3、 jsp页面实现:

<logic:present name="listMarket">

       <logic:iterate id="market" name="listMarket" scope="request">!

           id: <bean:write name="market" property="id"/>

           year: <bean:write name="market" property="year"/>

           quarter: <bean:write name="market" property="quarter"/>

           consumer: <bean:write name="market" property="consumer"/>

           presale: <bean:write name="market" property="preSale"/><br>

       logic:iterate>

logic:present>

阅读(1113) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~