分享

Struts2需要注意的一个小地方

 pengx 2008-10-30

今天在运行Struts2时,无意间发现程序在写Struts.xml有这样的问题:

以下是本人一个Action映射的配置文件

xml 代码
  1. <action name="saveExhibitionAppTable"  
  2.             class="cn.gov.tdb.controller.EnterpriseController"  
  3.             method="saveExhibitionAppTable">  
  4.             <result name="input">exhibitionAppTable.jspresult>  
  5.             <result name="success" type="redirect-action">  
  6.                 generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}   
  7.             result>  
  8.         action>  

 

没有什么特别的地方就是在

xml 代码
  1. <result name="success" type="redirect-action">  
  2.                 generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}   
  3.             result>  
这里返回的是一个redirect-action, ${getTicketSource}等这三个参数是这个Action的三个属性(有get,set方法的),我想把它们传给generateBarcode.tdbdb, 却发现一直取不到这三个传过来的参数,空指针报错.
然后我又把配置文件改成如下,弄成generateBarcode.jsp发现值确实已经传过来了,看来Struts2在redirec-action的时候已经处理过了.
xml 代码
  1. <result name="success">
  2.                 generateBarcode.jsp?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}   
  3.             result>  
查了查Strut2的文档,发现有以下配置,也就是说这个时候把要传递的参数如果分开来的话,通过redirec-action也是可以正常传过来的.
xml 代码
  1. <action name="saveExhibitionAppTable"  
  2.             class="cn.gov.tdb.controller.EnterpriseController"  
  3.             method="saveExhibitionAppTable">  
  4.             <result name="input">exhibitionAppTable.jspresult>  
  5.             <result name="success" type="redirect-action">  
  6.                 <param name="actionName">generateBarcodeparam>  
  7.                 <param name="namespace">/param>  
  8.                 <param name="getTichetSource">${getTichetSource}param>  
  9.                 <param name="companyId">${companyId}param>  
  10.                 <param name="serviceId">${serviceId}param>  
  11.             result>  
  12.         action>  

 

大家注意过这个问题吗?

评论
cd_tiger 2008-09-22   回复
我的做法很简单
type改为type="redirct"
在结果中加入扩展名字
huobao89 2008-09-18   回复
谢谢呀
xskowscut 2008-08-05   回复
:P 
runjia1987 2008-05-01   回复
我一般都不写"type='redirect-action'"
moonzhao 2008-02-29   回复
<param name="companyId">${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了没有相应的属性,是会报异常的,虽然在页面上没问题,但还是不可取的
jiayanchang 2008-01-21   回复
好贴  救我一命
xuejianshan 2007-12-27   回复
学习之中~~ :D 
musing 2007-11-08   回复
楼主有没有群,能否把我加上去?
musing 2007-11-08   回复
Java代码 复制代码
  1. &_amp;_ companyId=${companyId}  

把两个_去掉
musing 2007-11-08   回复
Java代码 复制代码
  1. &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>
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>  
却能正常传参数,怎么解释呢?
yufei 2007-10-25   回复
redirect-action 是重定向,是服务器让浏览器重新发送一个请求过去,这时候request的参数肯定会丢失的(象servlet里,response.sendRedirect("url"))
struts2 默认是dispatcher,这个是服务器端转向,在服务器端执行,(象servlet里,request.getRequestDispatcher("url").forword(request,response))
kyo100900 2007-10-22   回复
不知道这算不算Struts2的Bug呢?
lijie250 2007-10-22   回复
我遇到这个问题!但是我也是按照你的第一种写法 写的!
在ACTION里处理了下!如果遇到空就赋初值!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多