zhipingch 原創
去年初,正好負責一個醫藥信息系統的設計開發,架構設計時,采用Struts+JDBC(自定義采用適配器模式封裝了HashMap動態VO實現的持久層)。後來ajax熱潮興起,正好系統中有很多地方需要和服務器端交互數據,如采購銷售系統中的訂單頭/訂單明細等主從表結構的維護。
[color=blue]數據交互過程[/color],我們考慮采用xml來組織數據結構,更新/保存:前台封裝需要的xml,通過ajax提交---〉action解析xml ---〉改造原有的持久層實現xml持久化;
查詢時:持久層根據實際需要返回xml,document對象,---〉action 處理 --〉前台自己封裝js庫來解析xml,並刷新部分頁面。
ajax:已經有很多方法實現跨浏覽器的方式,這裡只介紹最簡單的方式,同步模式下提交xmlStr給action(*.do)。
struts中我們擴展了Action,實現了xmlStr轉化成document對象(dom4j),並且完善了轉發方式。如
[quote]
1.DispatchAction
以一個Controller響應一組動作絕對是Controller界的真理,Struts的DispatchAction同樣可以做到這點。
[list]
<action path="/admin/user" name="userForm" scope="request" parameter="method" validate="false">
<forward name="list" path="/admin/userList.jsp"/>
</action>
[/list]
其中parameter="method" 設置了用來指定響應方法名的url參數名為method,即/admin/user.do?method=list 將調用UserAction的public ActionForward list(....) 函數。
public ActionForward unspecified(....) 函數可以指定不帶method方法時的默認方法。[/quote]
但是這樣需要在url後多傳遞參數[size=18][color=red]method=list [/color][/size];並且action節點配置中的[color=red]parameter="method" [/color]
也沒有被充分利用,反而覺得是累贅!
因此我們直接在BaseDispatchAction中增加xml字符串解析,並充分利用action節點配置中的[color=red]parameter="targetMethod" [/color],使得轉發的時候,action能夠直接轉發到子類的相應方法中,減少了url參數傳遞,增強了配置信