#
re: 如何给Webwork的redirect的result传递多个参数
今天遇到一个问题,在Webwork 2.2里面给一个Action的result传多个参数:
原先配置如下
<action name="blahblahAction" class="blahAction" method="blah">
<result name="success" type="redirect">/some.action?field1=${field1}&field2=${field2}</result>
</action>
运行时候出现如下提示:
The reference to entity "field2" must end with the ';' delimiter.
我本以为是OGNL的问题,四处搜寻,不得其解……看了DTD也没有发现问题。
后来修改过程中突然发现原来是SAX解析器出错,我这才想到可能是XML的问题。
经过再三查询得到解决方案:
使用"&"代替"&",原理和HTML中的转义相同,我居然忘记了XML的语法规范,惭愧。
配置如下:
<action name="blahblahAction" class="blahAction" method="blah">
<result name="success" type="redirect">/some.action?field1=${field1}&field2=${field2}
</result>
</action>
工作正常了!
评论
#
re: 如何给Webwork的redirect的result传递多个参数
呵呵,可能你看错了。这里是说对result的多参数进行配置,而不是对action的参数进行配置,两者所处的Action生命周期不同。<param>参数负责给Action初始化赋值,而对result不能通过<param>赋值,在result type="redirect"时相当于Action生命周期结束并将参数传给下一个action或者一些url触发的事件。
其实上面的代码如果不简写,将所有的参数指明是这样的:
<action name="blahblahAction" class="blahAction" method="blah">
<result name="success" type="redirect">
<param name="location">/some.action?field1=${field1}&field2=${field2}</param>
<param name="parse">true</param>
</result>
</action>
因为type="reirect"的result只接受location和parse两个参数,不支持自定义的param,这是个限制。这个限制可以在webwork的wiki上面搜索到。希望以后webwork可以改变它。不过lightbody本人也许觉得OGNL的表达式已经够强大了,呵呵
其实上面的代码如果不简写,将所有的参数指明是这样的:
<action name="blahblahAction" class="blahAction" method="blah">
<result name="success" type="redirect">
<param name="location">/some.action?field1=${field1}&field2=${field2}</param>
<param name="parse">true</param>
</result>
</action>
因为type="reirect"的result只接受location和parse两个参数,不支持自定义的param,这是个限制。这个限制可以在webwork的wiki上面搜索到。希望以后webwork可以改变它。不过lightbody本人也许觉得OGNL的表达式已经够强大了,呵呵