Struts2.0与 DWR2.0 的整和

转自:http://lxy19791111.javaeye.com/blog/130206

http://swimren.javaeye.com/blog/98186

 

怎么把附件加上来呢??!!!。。。。。。唉。。。。

最近在学struts2 想用dwr2,在网上搜到这位大侠写的方法,我照着改了,但是不会编译,唉,有找啊找,看到lxy19791111大侠说他编译好了,就去下载没想到要在javaEye注册才行,遂去注册,注册好了之后javaEye又说要3天以后才能下载,晕倒。。。向同事借了他的号来下载才了事。现在把它放到自己的blog里,不用注册大家一样下载。

下面是修改源码的方法:

 

最近发现dwr出了2.0版本,里面提供了与目前一些主流框架的整合,如Spring,JSF,Hibernate,Struts1,Webwork等,但Struts2.0还没有提供,由于现在的项目我们采用的是Struts2.0,所以参考dwr与webwork的整合代码,修改完成了
dwr与Struts2的整和代码

1、首先下载Dwr2的源代码,将 org/directwebremoting/webwork下的类拷出来,放到 新建的一个包
   比如 org.dwr.struts2 里,接下去就可以去修改里面的代码,
    将类的引用都修改为从struts2的包中引用。
2、接下去关键是修改 DWRAction.java这个类
   在该类中 比较特殊的是
   com.opensymphony.webwork.dispatcher.DispatcherUtils
对应的struts2中的  org.apache.struts2.dispatcher.Dispatcher这个类
  ServletActionContext.WEBWORK_VALUESTACK_KEY  对应 ServletActionContext.STRUTS_VALUESTACK_KEY

3、修改里面的 private DWRAction(ServletContext servletContext) 构造函数为

java 代码
  1. private DWRAction(ServletContext servletContext) throws ServletException   
  2.     {   
  3.        // Dispatcher.initialize(servletContext);   
  4.         m_wwDispatcher = Dispatcher.getInstance();   
  5.         if(m_wwDispatcher==null)   
  6.         {   
  7.            m_wwDispatcher = new Dispatcher(servletContext, new HashMap());   
  8.            m_wwDispatcher.init();   
  9.            Dispatcher.setInstance(m_wwDispatcher);   
  10.         }   
  11.            
  12.         m_actionProcessor = loadActionProcessor(servletContext.getInitParameter         (DWRACTIONPROCESSOR_INIT_PARAM));   
  13.     }   

然后修改protected ActionInvocation invokeAction 方法 将第126行的代码

java 代码
  1. ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(actionDefinition.getNamespace(), actionDefinition.getAction(), extraContext, actionDefinition.isExecuteResult(), false);   

替换为以下代码

java 代码

 

  1. Configuration config = du.getConfigurationManager().getConfiguration();   
  2.             ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(   
  3.                     mapping.getNamespace(), mapping.getName(), extraContext, actionDefinition.isExecuteResult(), false);   

最后将 protected void prepareContinuationAction(HttpServletRequest request, Map extraContext)
 里的代码都注释掉 就可以了

4,修改 DWRActionUtil.js文件将里面的webwork字样都替换为 struts2,也可以不用修改,不过觉得不爽就是了
  然后就可以按照与webwork整和的方式配置dwr.xml就可以了

 

最后有一点很重要,就是在 web.xml文件中配置DwrServlet 的时候一定要加上 
     exposeInternals
     true
      

这个参数,否则生成的 DWRAction.js 这个文件将不存在 DWRAction.execute(actionObj, params, callbackObj) 这个函数,这个问题折磨了我近半天的时间啊.

如果需要可以提供代码上来,不过最好还是建议大家亲自去修改一下比较好.

 

下面是修改配置文件的方法:

DWR2.0默认支持webwork,在网上找了些资料有兄弟已经走在了我前面了,呵呵。不过我已经将其打包成了dwr4struts2.jar,见附件。

dwr.xml文件:

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>     
  2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">     
  3. <dwr>     
  4.     <allow>     
  5.         <create creator="none" javascript="DWRAction">  
  6.             <param name="class" value="org.directwebremoting.struts2.DWRAction"/>  
  7.             <include method="execute"/>  
  8.         </create>  
  9.         <convert converter="bean" match="org.directwebremoting.struts2.ActionDefinition">  
  10.           <param name="include" value="namespace,action,method,executeResult" />  
  11.         </convert>  
  12.         <convert converter="bean" match="org.directwebremoting.struts2.AjaxResult"/>  
  13.         <!-- 相应的Struts2的Action -->  
  14.         <convert match="com.*.*Action" converter="bean"/>  
  15.         <!-- 如果有复杂类型要转换,如List中有多个JavaBean对象 -->  
  16.         <convert match="com.*.model.*Bean" converter="bean"/>  
  17.     </allow>  
  18. </dwr>  

 

testDwr.htm文件:

xml 代码
  1. <html>  
  2.     <head>  
  3.         <script type='text/javascript' src='/js/dwr/DWRActionUtil.js'></script>  
  4.         <script type='text/javascript' src='/dwr/interface/DWRAction.js'></script>  
  5.         <script type='text/javascript' src='/dwr/engine.js'></script>  
  6.         <script type='text/javascript' src='/dwr/util.js'></script>  
  7.         <script language="javascript">  
  8.                 function testDwr(){   
  9.                     DWRActionUtil.execute({namespace:'/',action:'special',executeResult:'false'}, 'frmDwr', writePage);   
  10.                 }   
  11.                 function writePage(data){                   alert("departure = "+data.departure);   
  12.                 }   
  13.         </script>  
  14.     </head>  
  15.     <body>  
  16.         <form name="frmDwr" method="post" action="" id="frmDwr">  
  17.             <input name="departure" value="PEK"/>  
  18.             <input type="button" value="测试" onclick="testDwr();">  
  19.         </form>  
  20.     </body>  
  21. </html>  

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值