轉自于:http://swimren.javaeye.com/blog/98186
最近發現dwr出了2.0版本,里面提供了與目前一些主流框架的整合,如Spring,JSF,Hibernate,Struts1,Webwork等,但Struts2.0還沒有提供,由于現在的項目我們采用的是Struts2.0,所以參考dwr與webwork的整合代碼,修改完成了 1、首先下載Dwr2的源代碼,將 org\directwebremoting\webwork下的類拷出來,放到 新建的一個包 3、修改里面的 private DWRAction(ServletContext servletContext) 構造函數為 java 代碼
然后修改protected ActionInvocation invokeAction 方法 將第126行的代碼 java 代碼
替換為以下代碼 java 代碼
最后將 protected void prepareContinuationAction(HttpServletRequest request, Map extraContext) 4,修改 DWRActionUtil.js文件將里面的webwork字樣都替換為 struts2,也可以不用修改,不過覺得不爽就是了
這個參數,否則生成的 DWRAction.js 這個文件將不存在 DWRAction.execute(actionObj, params, callbackObj) 這個函數,這個問題折磨了我近半天的時間啊. 如果需要可以提供代碼上來,不過最好還是建議大家親自去修改一下比較好. |
評論 共 5 條 | 發表評論 |
其實 ,Servlet那層,可以扔掉了。 不要在再Web層還用 XX+XX。 |
對,采用dwr,可以直接去訪問業務層,不用采用Struts 之類的,但有些時候還需要控制層,在個別的地方的使用dwr去調用,兩種結合著就比較好了. |
請教樓主: 1.我現在在試用AppFuse 2.0-M5,我嘗試了它自帶的DWR 2.0.1和Struts 2.0.6,在客戶端能夠正確地調用Struts action的方法并返回數據。我看了DWRAction.java的代碼,確實是象你提到的改動前的樣子,但我沒做任何改動。我想問一下你改動這個類的目的是什么呢?不改動會有什么問題呢? 2.你在文中提到:
引用
最后有一點很重要,就是在 web.xml文件中配置DwrServlet 的時候一定要加上
exposeInternals true
我的web.xml沒有設置這一項。如果沒有生成DWRAction.execute(actionObj, params, callbackObj) ,會有什么問題呢? 附上我的例子作為分析參考: 代碼
其中InquiryMasterAction的getDetailsByMasterId方法的Java代碼為: 代碼
生成的inquiryMasterAction.js的內容: 代碼
在JSP頁面中只需要調用: 代碼
|
to movingboy : 我沒有具體的去研究 AppFuse 2.0-M5的源碼,不過從你的描述中可以看出來,你的這種配置方式也是可以正常工作的。 代碼
這種方式去調用就可以了,這個方法最終會去調用 DWRAction.js里的execute()方法。這種方式是保留了Action的原汁原味,按照Struts2的機制去處理的。 具體的你可以參考一下 dwr2的文檔中 與webwork整和的部分或著參考下面的 http://wiki.javascud.org/display/dwrcn/WebWork+Integration?focusedCommentId=917506 也可以 |