`
Mysun
  • 浏览: 270545 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

webwork result type之redirect&redirect-action

阅读更多
   可能大家都知道在webwork里面如果想重定向到另外一个页面主要有两种方法,一种就是使用可以保留Request上下文的Chain result type,一种是不保留Request上下文的Redirect result type。这两种Redirect类型都是webwork提供默认支持的。其中redirect又有两种类型,redirect和redirect-action。我在这里主要想说一下这两种redirect type的差别。
   关于redirect-action的说明可以再opensymphony的webwork wiki上找到http://www.opensymphony.com/webwork/wikidocs/Redirect%20Action%20Result.html。里面有提到说如果想要让浏览器重定向到一个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

这里有几个地方需要说明:

    [1]ApplicationContext:这个应用上下文是你给你web应用选择的访问起始点。例如在jboss当中就是在application.xml中用<context-root>标签设定的那个值。
    [2]namespace:这个namespace跟webwork配置文件中<package>标签中的namespace属性意义相同。也就是说,如果你在跳转之前的url为http://mysun.iteye.com/test/test.do并且你在你的关于test这个action的配置文件当中的规定了namespace为test,那么如果你在resul里面用了<param name="namespace">xxx</param>,那么经过转换之后的url就变成了http://mysun.iteye.com/test/xxx/test.do。
    说到这里,需要说明一下redirect-action的一个限制,就是你无法改变你当前的namespace。也就是说,如果你在提交时候的使用了test这个namespace,那么使用redirect-action定义的url始终会在test这个namespace下面。如果你想要改变这个namespace,那就使用redirect吧,直接写url。

   还有一点要说一下,就是${field1}这个参数的赋值问题。field1的赋值是使用webwork的ONGL实现的。当webwork看到result里面有这个${field1}类型的参数的时候,就会从webwork的value stack中找field1这个属性,然后把field1这个属性的值赋值给${field1},最后再拼装成url。如果没有找到对应的值,那么在url里面这个field1的值就为空,看起来会是这样的field1=&field2=
  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics