webwork result type之redirect&redirect-action

本文对比了WebWork框架中redirect与redirect-action的区别。redirect-action简化了URL编码过程,并支持通过参数指定目标Action名称、方法及参数值。但其无法改变当前命名空间。

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

可能大家都知道在webwork里面如果想重定向到另外一个页面主要有两种方法,一种就是使用可以保留Request上下文的Chain result type,一种是不保留Request上下文的Redirect result type。这两种Redirect类型都是webwork提供默认支持的。其中redirect又有两种类型,redirect和redirect-action。我在这里主要想说一下这两种redirect type的差别。
关于redirect-action的说明可以再opensymphony的webwork wiki上找到[url]http://www.opensymphony.com/webwork/wikidocs/Redirect%20Action%20Result.html[/url]。里面有提到说如果想要让浏览器重定向到一个URL上去调用一个特定的action最好使用redirect-action。原因是使用redirect-action的时候你不用自己去对URL进行encode。在使用redirect的时候,对于url的编写需要符合xml规范,比如&需要使用&amp来代替等等,一不小心就会忘记掉。在使用redirect-action之后,url的编码工作由webwork帮助你完成,你要做的就是用<param></param>写一些参数进去。
比如,你的result可能这样写:

<result name="OK" type="redirect-action">
<param name="actionName">test</param>
<param name="method">test</param>
<param name="namespace">xxx</param>
<param name="field1">${field1}</param>
<param name="field2">${field2}</param>
</result>

这样的话,webwork就会帮你生成一个url,大概是这个样子的:

http://mysun.javaeve.com/[color=red]ApplicationContext[/color]/[color=olive]namespace[/color]/test!test.do

这里有几个地方需要说明:
[list]
[1][color=red]ApplicationContext[/color]:这个应用上下文是你给你web应用选择的访问起始点。例如在jboss当中就是在application.xml中用<context-root>标签设定的那个值。
[2][color=olive]namespace[/color]:这个namespace跟webwork配置文件中<package>标签中的namespace属性意义相同。也就是说,如果你在跳转之前的url为http://mysun.iteye.com/test/test.do并且你在你的关于test这个action的配置文件当中的规定了namespace为test,那么如果你在resul里面用了[color=blue]<param name="namespace">xxx</param>[/color],那么经过转换之后的url就变成了http://mysun.iteye.com/test/xxx/test.do。
说到这里,需要说明一下redirect-action的一个限制,就是你无法改变你当前的namespace。也就是说,如果你在提交时候的使用了test这个namespace,那么使用redirect-action定义的url始终会在test这个namespace下面。如果你想要改变这个namespace,那就使用redirect吧,直接写url。
[/list]
还有一点要说一下,就是${field1}这个参数的赋值问题。field1的赋值是使用webwork的ONGL实现的。当webwork看到result里面有这个${field1}类型的参数的时候,就会从webwork的value stack中找field1这个属性,然后把field1这个属性的值赋值给${field1},最后再拼装成url。如果没有找到对应的值,那么在url里面这个field1的值就为空,看起来会是这样的[color=red]field1=&field2=[/color]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值