您的位置:首页 > 编程语言 > Java开发

Struts2.0与DWR2.0的整和

2009-04-22 19:30 295 查看
 
最近发现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 代码

private DWRAction(ServletContext servletContext) throws ServletException   
    {   
       // Dispatcher.initialize(servletContext);   
        m_wwDispatcher = Dispatcher.getInstance();   
        if(m_wwDispatcher==null)   
        {   
           m_wwDispatcher = new Dispatcher(servletContext, new HashMap());   
           m_wwDispatcher.init();   
           Dispatcher.setInstance(m_wwDispatcher);   
        }   
           
        m_actionProcessor = loadActionProcessor(servletContext.getInitParameter         (DWRACTIONPROCESSOR_INIT_PARAM));   
    }   

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

java 代码

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

替换为以下代码

java 代码
 

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

最后将 protected void prepareContinuationAction(HttpServletRequest request, Map extraContext)

 里的代码都注释掉 就可以了

4,修改 DWRActionUtil.js文件将里面的webwork字样都替换为 struts2,也可以不用修改,不过觉得不爽就是了

  然后就可以按照与webwork整和的方式配置dwr.xml就可以了

 

<init-param></init-param>最后有一点很重要,就是在 web.xml文件中配置DwrServlet 的时候一定要加上 

    
<param-name></param-name>
exposeInternals

    
<param-value></param-value>
true

      

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

如果需要可以提供代码上来,不过最好还是建议大家亲自去修改一下比较好.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息