struts2配置type="redirect"传参数数据会丢失解决办法!
2016-11-20 16:33
537 查看
struts2配置type="redirect"传参数数据会丢失解决办法!
1.在上一篇文章中我说到了:使用struts2跳转后css和js失效的解决方式
上一使用struts是【样式有问题】之后 又发现 解决了样式 只要你后面要添加数据那么就会数据失效!2.在加了type="redirect"后,相当于重新发送一个请求到某一个jsp页面上,请求不包含任何参数,而默认方式是forward,即不产生一个新的请求,包含原来的参数,后遗症是跳转到jsp页面后会保持原来的URL
。这在找办法如何将URL变为***.jsp而不是***.action,而且又能传递参数到JSP中。尝试着用request或者requestScope
方法一:传递方法:
<pre name="code" class="java">
<result name="success" type="redirect">/main/main.jsp</result>
//这样redirect是定向指向一个url页面,传参数的话用request会使得数据丢失。
//错误传参: ServletActionContext.getRequest().setAttribute("TreeList", list);
获取数据:#request.TreeList
//正确传参: ServletActionContext.getRequest().getSession().setAttribute("TreeList", list);
获取数据:# .TreeList
request不行,就用session。虽然还不是很理解,但是问题解决了,记录一下!
第二类型方法:
struts.xml
<result name="passForeignlands" type="redirectAction">LoansForeignlandsSituation.action</result>
type可以用“chain”,如果还不行,那么你应该这么写
在Action之间传递参数有如下方法:
(方法一):
Xml代码
<result name="topic" type="redirect">findTopics.action?topicId=${topicId}</result>
(方法二):
Xml代码
<result name="topic" type="redirect-action">
<param name="actionName">findTopics</param>
<param name="topicId">${topicId}</param>
</result>
如果是多个参数的话,继续再加几个<param>就行了,对于(方法一)如果是多个参数的怎么办?
Xml代码
<result name="topic" type="redirect">findTopics.action?topicId=${topicId}&
;elementId=${elementId}</result>
使用redirect重置链接需要后缀名,使用了redirect-action就不能使用了,就例如使用chain一样,只需要写action的配置名,如果加入后缀名.action,就会报出异常,action未配置正确。在这个配置文件里,多个参数的连接符使用了"&
;"(分号要挨着amp,此处由于转义无法正常书写故添加空格),这是由于XML的语法规范,应该使用"& ;"代替"&",原理和HTML中的转义相同。
chain 用于把相关的几个action连接起来,共同完成一个功能。
Java代码
<action name="step1" class="test.Step1Action">
<result name="success" type="chain">step2.action</result>
</action>
<action name="step2" class="test.Step2Action">
<result name="success">finish.jsp</result>
</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>
相关文章推荐
- Struts2配置文件中redirect传递中文参数乱码的解决办法!
- 【struts2配置】result type="redirect"传参数问题
- 上struts2的xml在<result type="redirect">参数问题
- "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法
- nginx升级到 0.8.53 之后,使用老的配置出现duplicate MIME type "text/html"问题的解决办法
- Struts2 配置文件 type="redirect"的作用
- 关于struts2的xml中<result type="redirect">参数问题
- struts2 配置文件详解 type="stream chain dispatcher、redirect(redirect-action)"
- 当提交带文件的的form(enctype="multipart/form-data")时,不能获得参数的解决办法
- ELF binary type "0" not known.解决办法
- asp.net 默认配置下,Session莫名丢失的原因及解决办法
- "无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开"在VC中解决办法
- 风声无组件上传出现"无效的过程调用或参数instr"的解决办法
- net传递中文参数数据丢失问题解决方案 ,传递中文参数报错
- struts2中form提交到action中的中文参数乱码问题解决办法
- phpmyadmin " 无法载入 mcrypt 扩展,<br />请检查 PHP 配置"的问题解决办法
- 禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项 解决办法
- 向ACCESS中的"时间/日期"字段中插入DateTime.Now时出现“标准表达式中数据类型不匹配。”错误的解决办法
- asp.net 默认配置下,Session莫名丢失的原因及解决办法
- [导入]关于DATAGRID数据更改时点2次/行号跟不准/失去焦点/丢失e等一系列问题的解决办法: