一、 問題描述:
1. 技術使用Ext2.0 ,struts2.0
2. 在一個form表單中,有一個參數為url,這個url是維護在數據庫中的,代表一個業務數據顯示的頁面,當用戶選擇此業務進行處理時,就需要跳轉到此業務類型的頁面進行顯示,同時還需要傳輸過去一些數據;由于傳輸的數據量也是不定的,可能會超過1024,所以使用javaScript的 window.location 進行跳轉,參數傳遞可能有問題,所以需要更改為post的方式將數據傳遞過去。
二、 Ext2.0 form 簡介
Ext 中的form表單提交,默認的情況下為ajax方式,也就是說當你點擊form的submit按鈕時,頁面不進行跳轉,只是返回處理結果(成功或者失敗)。
但是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();
}
在上面的配置中藍色的部分就是form表單的非ajax提交方式,然后再指定其數據傳輸方式使用‘post’方式。
三、 Struts2的Chain Result介紹
在struts2中配置請求的跳轉,都是在struts.xml中指定action的<result>節點,默認我們都是跳轉到×××.jsp頁面,但是有時候我們要跳轉到其他人已經寫好的action中進行處理,這時候就需要用到 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>
注意藍色部分,就是表明login的跳轉將使用 /secure下的dashboard的action進行處理,最終將跳轉到dashboard.jsp頁面
四、 問題解決方案
1. 通過上面介紹的Ext form的非ajax方式和struts2的Chain Result的處理方式。
2. 我們先設計一個業務跳轉“中轉站”,此中轉站的功能主要是接收用戶選擇相應的業務處理之后,根據參數中的url,跳轉到對應的業務顯示頁面中。
3. 將Ext中的form表單配置為非Ajax方式,action指向“中轉站”的action
submitForm.getForm().getEl().dom.action = rootPath + "elecbill/common/unTask_goBusiPage.action"
4. 然后在中轉站中解析傳遞的url參數,將namespace 的名稱和action的名稱取出并且保存為String actionName 和 Sting nameSpace 。
在struts.xml文件中配置如下:
<result name="goBusiPage" type="chain">
<param name="actionName">${actionName}</param>
<param name="namespace">${namespace}</param>
</result>
這樣就可以就實現了動態跳轉了!
posted on 2010-07-12 11:33
夢源 閱讀(2102)
評論(0) 編輯 收藏