JavaScud | Forum | JIRA | Blog |
  Dashboard > DWR中文文档 > ... > Integration > WebWork Integration
  DWR中文文档 Log In View a printable version of the current page.  
  WebWork Integration
Added by 黑灵, last edited by 黑灵 on Oct 28, 2006
Labels: 
(None)

通过DWR来调用WebWork的Action

WebWork支持在DWR2.0m3以后才有。

要可以通过DWR调用WW的Action,要做两件事。

步骤1: 配置dwr.xml

你必须在dwr的配置文件中加入这样的配置:

<create creator="none" javascript="DWRAction">
  <param name="class" value="org.directwebremoting.webwork.DWRAction"/>
  <include method="execute"/>
</create>

<convert converter="bean" match="org.directwebremoting.webwork.ActionDefinition">
  <param name="include" value="namespace,action,method,executeResult" />
</convert>

<convert converter="bean" match="org.directwebremoting.webwork.AjaxResult"/>

这样你AjaxWebWork Action调用返回一个action实例(而不是文字)。然后你必须包括action对象的转换器定义(package级别或单独action)。

<convert converter="bean" match="<your_action_package>.*"/>

步骤2: 在JSP中导入脚本

下面这些代码开启DWR调用Action的功能。你还要导入DWRActionUtil.js脚本(在你的web脚本路径中)

使用
像这样在JS中调用Action:

DWRActionUtil.execute(id, params, callback [, displayMessage]);

id 参数可以是下面这些:

  • actionUri: 要调用action的URI(没有 .action). 例如:
    DWRActionUtil.execute('/ajax/TestFM', 'myform', 'doOnTextResult');
  • actionDefinitionObject: 在xwork.xml中定义的action对象. 必须指定下面的内容:
    • namespace: xwork.xml中action的名称空间
    • action: xwork.xml中action的名字
    • executeResult: true|false (是否执行action的结果, 如果false直接返回action实例)
      例如:
      DWRActionUtil.execute({
        namespace:'/ajax',
        action:'TestJS',
        executeResult:'true'
      }, 'data', doOnJSResult, "stream...");

params 必须是这些:

  • emptyParams: 传递{}忽略任何参数。
    例子:
    DWRActionUtil.execute('/ajax/TestFM', {}, doOnJSResult, "stream...");
  • fieldId: 被转换为action调用参数的字段的id。
    例子:
    <input id="mytext" name="mytext" value="some value" type="text"/>
    DWRActionUtil.execute('/ajax/TestFM', 'mytext', doOnJSResult, "stream...");
  • formId: 表单的id. 所有的input值被转换为action调用参数。

Note : 如果你的action使用了parameter拦截器,那么你的action会得到正确的参数值,请参考WebWork的文档。

callback 可以是:

  • callbackFunction: 在DWR中,这个函数在请求完毕后调用。
  • callbackObject: 在DWR中,callback对象。

最后 displayMessage 是可选参数,当请求完毕后显示的消息(参考DWR文档)

高级

你可以声明一个pre/post Action处理器,在web.xml中的一个context-wide初始化参数(dwrActionProcessor)。处理器必须实现org.directwebremoting.webwork.IDWRActionProcessor 接口。这个处理器将会在action之前和之后被调用,所以你可以做一些预处理或改变结果。

2007-4-27 17:15:59 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet dwr-invoker threw exception
java.lang.NoClassDefFoundError: com/opensymphony/xwork/config/ConfigurationException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2395)
at java.lang.Class.privateGetPublicMethods(Class.java:2519)
at java.lang.Class.getMethods(Class.java:1406)
at org.directwebremoting.impl.DefaultDebugPageGenerator.generateTestPage(DefaultDebugPageGenerator.java:111)
at org.directwebremoting.servlet.TestHandler.handle(TestHandler.java:44)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
at org.directwebremoting.servlet.DwrServlet.doGet(DwrServlet.java:132)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:414)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:595)

我按照本网站的例子做的配置,但在打开测试页,进入(DWRTest)我的creator时,报以上错误。请问是什么原因呢?

Posted by Anonymous at Apr 27, 2007 17:38 | Reply To This

为什么总是提示:Methods defined by DWR can not be remoted.
在debug页面显示:execute() is excluded:Methods defined by DWR can not be remoted.
配置文件:<include method="execute" />
问题在哪里?

Posted by Anonymous at May 19, 2007 12:00 | Reply To This

同上,现在也没找到问题出在哪里,希望高手指点一下

Posted by Anonymous at Jun 20, 2007 20:59 | Reply To This

不能调用action,错误信息如下:
WARN TypeHintContext:59 - Missing type info for execute(1<0>). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml
15:45:00,093 WARN TypeHintContext:59 - Missing type info for execute(1<1>). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml
15:45:00,093 INFO DefaultRemoter:51 - Exec: DWRAction.execute()
15:45:00,203 WARN DefaultRemoter:67 - Method execution failed:
javax.servlet.ServletException: Cannot invoke action 'saveEmployee' in namespace '/newperson'
at org.directwebremoting.webwork.DWRAction.invokeAction(DWRAction.java:149)
at org.directwebremoting.webwork.DWRAction.doExecute(DWRAction.java:89)
at org.directwebremoting.webwork.DWRAction.execute(DWRAction.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:411)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:414)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:273)
at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:120)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:189)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)

这是为什么啊,希望能与有碰到同样问题的朋友一起探讨。

Posted by Anonymous at Jun 26, 2007 15:59 | Reply To This

这个问题我已经解决了,原来是service层的问题
跟dwr和webwork没什么关系。

Posted by Anonymous at Jun 27, 2007 10:36 | Reply To This

能不能具体的解释一下呀?我也遇到了这样的问题.

Posted by Anonymous at Mar 06, 2008 11:10 | Reply To This

ERROR [dwr]:250 - Servlet.service() for servlet dwr threw exception
java.lang.NoClassDefFoundError: com/opensymphony/xwork/config/ConfigurationException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2395)
at java.lang.Class.privateGetPublicMethods(Class.java:2519)
at java.lang.Class.getMethods(Class.java:1406)
at org.directwebremoting.impl.DefaultRemoter.generateInterfaceScript(DefaultRemoter.java:165)
at org.directwebremoting.servlet.InterfaceHandler.handle(InterfaceHandler.java:45)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:120)
at org.directwebremoting.servlet.DwrServlet.doGet(DwrServlet.java:106)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:414)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.mp.job.util.encoding.EncodeFilter.doFilter(EncodeFilter.java:22)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)

我也遇到这样的问题,应该怎么解决,请高手解决一下,谢谢!

Posted by Anonymous at Jun 30, 2007 18:31 | Reply To This

错误信息告诉你ConfigurationException类找不到,只要把xwork.jar加到WEB-INF/lib目录下,可以解决此问题

Posted by Anonymous at Aug 14, 2007 10:43 | Reply To This

我是上海的一个开发人员
我在使用这个功能的时候有些问题
请问能不能给个具体的例子,如果是视频就太好了
感谢!

My Email:yangyuanbing@126.com

Posted by Anonymous at Aug 10, 2007 11:41 | Reply To This

<convert converter="bean" match="org.directwebremoting.webwork.ActionDefinition">
<param name="include" value="namespace,action,method,executeResult" />
</convert>怎么配呀?value=""这个属性到底什么意思?我配的老是报对象不支持此属性
DWRActionUtil.js,DWRAction.js,util.js,engine.js都能引入。

Posted by Anonymous at Oct 29, 2007 23:06 | Reply To This

说的太泛泛了,也没有一个实例!!可以给我一个实例吗??
lkjlzf@163.com

Posted by Anonymous at Jan 17, 2008 09:56 | Reply To This

too simple, please take it detailly, or share the code,thank you!

Posted by Anonymous at Jun 07, 2008 02:17 | Reply To This
Site running on a free Atlassian Confluence Open Source Project License granted to WebWork China. Evaluate Confluence today.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.3 Build:#808 May 29, 2007) - Bug/feature request - Contact Administrators