action向jsp传值问题总结[zz]

本文介绍了在Struts框架中如何正确地从Action传递值到JSP页面的方法,并解决了使用request.setAttribute导致值无法正常传递的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.blogjava.net/19851985lili/articles/97664.html
你的代码本身有问题,一般来说,我们在使用Struts时,如果要在JSP隐式的传值给Action有两种情况:
1、要传的值是FromBean中的一个字段,你说的情况应该就是这种情况,例如需要在Edit页面中保存theID,在Action中执行Update操作时根据ID来更新数据库的值,你可以这样做:
Jsp中的代码为:<html:hidden property="theID" />
提交后,theID的值就会放到FormBean中的theID中,你就可以通过getTheID()来获得这个值。
2、要传的值不是FromBean中的一个字段:
Jsp中的代码为:
<input type="hidden" name="XXX" value="<%=request.getAttribute(XXX)%>">
当然,你应该在Action中就已经就这个值放到了request中,request.setAttribute("XXX",value);,
然后在Action中你才可以通过request.getParameter("XXX");来取得这个值。

补充一点,request.setAttribute("XXX",value);中,value应该是个String,还有,<input type="hidden" name="XXX" value="<%=request.getAttribute(XXX)%>">应该改为
<input type="hidden" name="XXX" value="<%=(String)request.getAttribute(XXX)%>">
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://blog.chinaunix.net/u1/55983/showart_522992.html

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配置文件中,将对应<Action>标签中的<Forward>标签中,设置“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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值