struts2配置type="redirect"传参数数据会丢失解决办法!


                                                      

 struts2配置type="redirect"传参数数据会丢失解决办法!


1.在上一篇文章中我说到了使用struts2跳转后css和js失效的解决方式

   上一使用struts是【样式有问题】之后 又发现 解决了样式 只要你后面要添加数据那么就会数据失效!

2.在加了type="redirect"后,相当于重新发送一个请求到某一个jsp页面上,请求不包含任何参数,而默认方式是forward,即不产生一个新的请求,包含原来的参数,后遗症是跳转到jsp页面后会保持原来的URL 。这在找办法如何将URL变为***.jsp而不是***.action,而且又能传递参数到JSP中。尝试着用request或者requestScope
方法一:传递方法:
  1. <pre name="code" class="java">

  2. <result name="success" type="redirect">/main/main.jsp</result>  
  3. //这样redirect是定向指向一个url页面,传参数的话用request会使得数据丢失。
  4. //错误传参:  ServletActionContext.getRequest().setAttribute("TreeList", list);  
  5. 获取数据:#request.TreeList
  6.   
  7. //正确传参:  ServletActionContext.getRequest().getSession().setAttribute("TreeList", list);  
  8. 获取数据:# .TreeList  
  9. request不行,就用session。虽然还不是很理解,但是问题解决了,记录一下!

      第二类型方法:
struts.xml
<result name="passForeignlands" type="redirectAction">LoansForeignlandsSituation.action</result>


type可以用“chain”,如果还不行,那么你应该这么写

1
2
3
4
< result  name = "passForeignlands"  type = "chain" >
     < param  name = "actionName" >LoansForeignlandsSituation</ param >
     < param  name = "loans" >${loans}</ param >
</ result >

首先你应该在passForeignlands中有一个getLoans的方法,在LoansForeignlandsSituation中有一个setLoans的




Action之间传递参数有如下方法:

(方法一):

Xml代码

  1. <result name="topic" type="redirect">findTopics.action?topicId=${topicId}</result>

(方法二):

Xml代码

  1. <result name="topic" type="redirect-action">
  2. <param name="actionName">findTopics</param>
  3. <param name="topicId">${topicId}</param>
  4. </result>

 

 

如果是多个参数的话,继续再加几个<param>就行了,对于(方法一)如果是多个参数的怎么办?

Xml代码

  1. <result name="topic" type="redirect">findTopics.action?topicId=${topicId}&amp ;elementId=${elementId}</result>

使用redirect重置链接需要后缀名,使用了redirect-action就不能使用了,就例如使用chain一样,只需要写action的配置名,如果加入后缀名.action,就会报出异常,action未配置正确。在这个配置文件里,多个参数的连接符使用了"&amp ;"(分号要挨着amp,此处由于转义无法正常书写故添加空格),这是由于XML的语法规范,应该使用"&amp ;"代替"&",原理和HTML中的转义相同。

 

chain 用于把相关的几个action连接起来,共同完成一个功能。

Java代码

  1. <action name="step1" class="test.Step1Action">
  2. <result name="success" type="chain">step2.action</result>
  3. </action>
  4. <action name="step2" class="test.Step2Action">
  5. <result name="success">finish.jsp</result>
  6. </action>

处于chain中的action属于同一个http请求,共享一个ActionContext




                                               方法三


在struts2中通常用addActionMessage()来保存操作提示并通过<s:actionmessage />标签在页面显示. 但是如果我们通过redirect来重定向的话, 会丢失保存在request里的信息, 这样就会导致actionmessage里的信息无法在页面显示.

那么如何保存这个actionmessage呢?查看了一下struts2的struts.xml,发现有一个名为store的拦截器,类名为 org.apache.struts2.interceptor.MessageStoreInterceptor,这个拦截器的作用就是将我们放在 ActionMessaage中的信息保存到session中,而不丢失,那么接下来的问题就好解决了。

在struts.xml中配置此拦截器即可.

<interceptor-ref name="store">
<param name="operationMode">AUTOMATIC</param>
</interceptor-ref>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值