2007-10-22
Struts2需要注意的一个小地方
关键字: Struts2.0今天在运行Struts2时,无意间发现程序在写Struts.xml有这样的问题:
以下是本人一个Action映射的配置文件
xml 代码
- <action name="saveExhibitionAppTable"
- class="cn.gov.tdb.controller.EnterpriseController"
- method="saveExhibitionAppTable">
- <result name="input">exhibitionAppTable.jspresult>
- <result name="success" type="redirect-action">
- generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
- result>
- action>
没有什么特别的地方就是在
xml 代码
- <result name="success" type="redirect-action">
- generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
- result>
这里返回的是一个redirect-action, ${getTicketSource}等这三个参数是这个Action的三个属性(有get,set方法的),我想把它们传给generateBarcode.tdbdb, 却发现一直取不到这三个传过来的参数,空指针报错.
然后我又把配置文件改成如下,弄成generateBarcode.jsp发现值确实已经传过来了,看来Struts2在redirec-action的时候已经处理过了.
xml 代码
- <result name="success">
- generateBarcode.jsp?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
- result>
查了查Strut2的文档,发现有以下配置,也就是说这个时候把要传递的参数如果分开来的话,通过redirec-action也是可以正常传过来的.
xml 代码
- <action name="saveExhibitionAppTable"
- class="cn.gov.tdb.controller.EnterpriseController"
- method="saveExhibitionAppTable">
- <result name="input">exhibitionAppTable.jspresult>
- <result name="success" type="redirect-action">
- <param name="actionName">generateBarcodeparam>
- <param name="namespace">/param>
- <param name="getTichetSource">${getTichetSource}param>
- <param name="companyId">${companyId}param>
- <param name="serviceId">${serviceId}param>
- result>
- action>
大家注意过这个问题吗?
评论
runjia1987
2008-05-01
我一般都不写"type='redirect-action'"
moonzhao
2008-02-29
<param name="companyId">${companyId}<param>
如果是一个类的属性:
比如
<param name="company.companyId">${company.companyId}</param>
好像有点问题
如果是一个类的属性:
比如
<param name="company.companyId">${company.companyId}</param>
好像有点问题
jiayanchang
2008-01-21
action name="saveExhibitionAppTable"
class="cn.gov.tdb.controller.EnterpriseController"
method="saveExhibitionAppTable">
<result name="input">exhibitionAppTable.jspresult>
<result name="success" type="redirect-action">
<param name="actionName">generateBarcodeparam>
<param name="namespace">/param>
<param name="getTichetSource">${getTichetSource}param>
<param name="companyId">${companyId}param>
<param name="serviceId">${serviceId}param>
result>
action>
这个在后台会提示在ognl了没有相应的属性,是会报异常的,虽然在页面上没问题,但还是不可取的
class="cn.gov.tdb.controller.EnterpriseController"
method="saveExhibitionAppTable">
<result name="input">exhibitionAppTable.jspresult>
<result name="success" type="redirect-action">
<param name="actionName">generateBarcodeparam>
<param name="namespace">/param>
<param name="getTichetSource">${getTichetSource}param>
<param name="companyId">${companyId}param>
<param name="serviceId">${serviceId}param>
result>
action>
这个在后台会提示在ognl了没有相应的属性,是会报异常的,虽然在页面上没问题,但还是不可取的
jiayanchang
2008-01-21
好贴 救我一命
xuejianshan
2007-12-27
学习之中~~

musing
2007-11-08
楼主有没有群,能否把我加上去?
musing
2007-11-08
&_amp;_ companyId=${companyId}
把两个_去掉
musing
2007-11-08
&companyId=${companyId}
改成这样就可以完善解决问题
yufei
2007-10-26
不好意思,上一个回答好像只能回答
<result name="success" type="redirect-action">
generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
</result>
和
<result name="success">
generateBarcode.jsp?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
</result>
不同运行情况的问题
-
-
后面这个问题也不太清楚,最近也没时间弄,提一下redirect-action和redirect是不一样的
redirect-action的actionName是重定向到action名
redirect的actionName是action执行后的跳转路径
(以上解释摘自webwork官方文档)
你可以试着把下面这句中间那部分声明称一个action,再在这里配置actionName或者改用redirect试试
<result name="success" type="redirect-action">
generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
</result>
<result name="success" type="redirect-action">
generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
</result>
和
<result name="success">
generateBarcode.jsp?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
</result>
不同运行情况的问题
-
-
后面这个问题也不太清楚,最近也没时间弄,提一下redirect-action和redirect是不一样的
redirect-action的actionName是重定向到action名
redirect的actionName是action执行后的跳转路径
(以上解释摘自webwork官方文档)
你可以试着把下面这句中间那部分声明称一个action,再在这里配置actionName或者改用redirect试试
<result name="success" type="redirect-action">
generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
</result>
kyo100900
2007-10-25
那
<result name="success" type="redirect-action">
<param name="actionName">generateBarcode</param>
<param name="namespace">/</param>
<param name="getTichetSource">${getTichetSource}</param>
<param name="companyId">${companyId}</param>
<param name="serviceId">${serviceId}</param>
</result>
却能正常传参数,怎么解释呢?
<result name="success" type="redirect-action">
<param name="actionName">generateBarcode</param>
<param name="namespace">/</param>
<param name="getTichetSource">${getTichetSource}</param>
<param name="companyId">${companyId}</param>
<param name="serviceId">${serviceId}</param>
</result>
却能正常传参数,怎么解释呢?
yufei
2007-10-25
redirect-action 是重定向,是服务器让浏览器重新发送一个请求过去,这时候request的参数肯定会丢失的(象servlet里,response.sendRedirect("url"))
struts2 默认是dispatcher,这个是服务器端转向,在服务器端执行,(象servlet里,request.getRequestDispatcher("url").forword(request,response))
struts2 默认是dispatcher,这个是服务器端转向,在服务器端执行,(象servlet里,request.getRequestDispatcher("url").forword(request,response))
kyo100900
2007-10-22
不知道这算不算Struts2的Bug呢?
lijie250
2007-10-22
我遇到这个问题!但是我也是按照你的第一种写法 写的!
在ACTION里处理了下!如果遇到空就赋初值!
在ACTION里处理了下!如果遇到空就赋初值!
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 90291 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最新评论
-
【JSF专家Dennis Byrne】 ...
to Itian:窗口之间传数据..很简单啊.. 子窗口付值到父窗口: wind ...
-- by terryzhou -
【JSF专家Dennis Byrne】 ...
不错哦..可惜看到太晚..上面两个问题都自己解决了.. 特别是MAP那个..比较 ...
-- by terryzhou -
JSF+AJAX企业级开发之路— ...
引用实际上Sun除了Java语言本身外,没有什么特别成功的东西 别忘了Sun是 ...
-- by mkclawhammer -
JSF+AJAX企业级开发之路— ...
-- by yydxl -
看看老外怎么正常关闭JDBC ...
是啊 说说看法嘛 不要只是去踩
-- by bingshen01






评论排行榜