今天在運行Struts2時(shí),無(wú)意間發(fā)現程序在寫(xiě)Struts.xml有這樣的問(wèn)題:
以下是本人一個(gè)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>
沒(méi)有什么特別的地方就是在
xml 代碼
- <result name="success" type="redirect-action">
- generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
- result>
這里返回的是一個(gè)redirect-action, ${getTicketSource}等這三個(gè)參數是這個(gè)Action的三個(gè)屬性(有g(shù)et,set方法的),我想把它們傳給generateBarcode.tdbdb, 卻發(fā)現一直取不到這三個(gè)傳過(guò)來(lái)的參數,空指針報錯.然后我又把配置文件改成如下,弄成generateBarcode.jsp發(fā)現值確實(shí)已經(jīng)傳過(guò)來(lái)了,看來(lái)Struts2在redirec-action的時(shí)候已經(jīng)處理過(guò)了.xml 代碼
- <result name="success">
- generateBarcode.jsp?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
- result>
查了查Strut2的文檔,發(fā)現有以下配置,也就是說(shuō)這個(gè)時(shí)候把要傳遞的參數如果分開(kāi)來(lái)的話(huà),通過(guò)redirec-action也是可以正常傳過(guò)來(lái)的.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>
大家注意過(guò)這個(gè)問(wèn)題嗎?
- 17:49
- 瀏覽 (4152)
- 論壇瀏覽 (3049)
- 評論 (16)
- 分類(lèi): Struts2
- 發(fā)布在 struts2 圈子
- 收藏
- 相關(guān)推薦
聯(lián)系客服
評論
type改為type="redirct"
在結果中加入擴展名字
如果是一個(gè)類(lèi)的屬性:
比如
<param name="company.companyId">${company.companyId}</param>
好像有點(diǎn)問(wèn)題
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>
這個(gè)在后臺會(huì )提示在ognl了沒(méi)有相應的屬性,是會(huì )報異常的,雖然在頁(yè)面上沒(méi)問(wèn)題,但還是不可取的
&_amp;_ companyId=${companyId}把兩個(gè)_去掉
&companyId=${companyId}改成這樣就可以完善解決問(wèn)題
<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>
不同運行情況的問(wèn)題
-
-
后面這個(gè)問(wèn)題也不太清楚,最近也沒(méi)時(shí)間弄,提一下redirect-action和redirect是不一樣的
redirect-action的actionName是重定向到action名
redirect的actionName是action執行后的跳轉路徑
(以上解釋摘自webwork官方文檔)
你可以試著(zhù)把下面這句中間那部分聲明稱(chēng)一個(gè)action,再在這里配置actionName或者改用redirect試試
<result name="success" type="redirect-action">
generateBarcode.tdbdb?getTichetSource=${getTichetSource}&companyId=${companyId}&serviceId=${serviceId}
</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>
卻能正常傳參數,怎么解釋呢?
struts2 默認是dispatcher,這個(gè)是服務(wù)器端轉向,在服務(wù)器端執行,(象servlet里,request.getRequestDispatcher("url").forword(request,response))
在A(yíng)CTION里處理了下!如果遇到空就賦初值!