一、 問題描述:
1. 技術(shù)使用Ext2.0 ,struts2.0
2. 在一個(gè)form表單中,有一個(gè)參數(shù)為url,這個(gè)url是維護(hù)在數(shù)據(jù)庫中的,代表一個(gè)業(yè)務(wù)數(shù)據(jù)顯示的頁面,當(dāng)用戶選擇此業(yè)務(wù)進(jìn)行處理時(shí),就需要跳轉(zhuǎn)到此業(yè)務(wù)類型的頁面進(jìn)行顯示,同時(shí)還需要傳輸過去一些數(shù)據(jù);由于傳輸?shù)臄?shù)據(jù)量也是不定的,可能會超過1024,所以使用javaScript的 window.location 進(jìn)行跳轉(zhuǎn),參數(shù)傳遞可能有問題,所以需要更改為post的方式將數(shù)據(jù)傳遞過去。
二、 Ext2.0 form 簡介
Ext 中的form表單提交,默認(rèn)的情況下為ajax方式,也就是說當(dāng)你點(diǎn)擊form的submit按鈕時(shí),頁面不進(jìn)行跳轉(zhuǎn),只是返回處理結(jié)果(成功或者失敗)。
但是Ext 還提供了非ajax的方式提交,只是需要額外的配置:
onSubmit : Ext.emptyFn,
submit : function() {
submitForm.getForm().getEl().dom.method = 'post';
submitForm.getForm().getEl().dom.action = rootPath + "elecbill/common/unTask_goBusiPage.action";
submitForm.getForm().getEl().dom.submit();
}
在上面的配置中藍(lán)色的部分就是form表單的非ajax提交方式,然后再指定其數(shù)據(jù)傳輸方式使用‘post’方式。
三、 Struts2的Chain Result介紹
在struts2中配置請求的跳轉(zhuǎn),都是在struts.xml中指定action的<result>節(jié)點(diǎn),默認(rèn)我們都是跳轉(zhuǎn)到×××.jsp頁面,但是有時(shí)候我們要跳轉(zhuǎn)到其他人已經(jīng)寫好的action中進(jìn)行處理,這時(shí)候就需要用到 Chain Result。Chain Result的配置如下:
<package name="public" extends="webwork-default">
<action name="login" class="...">
<result type="chain">
<param name="actionName">dashboard</param>
<param name="namespace">/secure</param>
</result>
</action>
</package>
<package name="secure" extends="webwork-default" namespace="/secure">
<action name="dashboard" class="...">
<result>dashboard.jsp</result>
</action>
</package>
注意藍(lán)色部分,就是表明login的跳轉(zhuǎn)將使用 /secure下的dashboard的action進(jìn)行處理,最終將跳轉(zhuǎn)到dashboard.jsp頁面
四、 問題解決方案
1. 通過上面介紹的Ext form的非ajax方式和struts2的Chain Result的處理方式。
2. 我們先設(shè)計(jì)一個(gè)業(yè)務(wù)跳轉(zhuǎn)“中轉(zhuǎn)站”,此中轉(zhuǎn)站的功能主要是接收用戶選擇相應(yīng)的業(yè)務(wù)處理之后,根據(jù)參數(shù)中的url,跳轉(zhuǎn)到對應(yīng)的業(yè)務(wù)顯示頁面中。
3. 將Ext中的form表單配置為非Ajax方式,action指向“中轉(zhuǎn)站”的action
submitForm.getForm().getEl().dom.action = rootPath + "elecbill/common/unTask_goBusiPage.action"
4. 然后在中轉(zhuǎn)站中解析傳遞的url參數(shù),將namespace 的名稱和action的名稱取出并且保存為String actionName 和 Sting nameSpace 。
在struts.xml文件中配置如下:
<result name="goBusiPage" type="chain">
<param name="actionName">${actionName}</param>
<param name="namespace">${namespace}</param>
</result>
這樣就可以就實(shí)現(xiàn)了動態(tài)跳轉(zhuǎn)了!