WebWork 支持在 DWR2.0m3 以后才有。
要可以通过 DWR 调用 WW 的 Action,要做两件事。
配置 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.*"/>
在 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 参数
displayMessage 是可选参数,当请求完毕后显示的消息(参考 DWR 文档)
高级
你可以声明一个 pre/post Action 处理器,在 web.xml 中的一个 context-wide 初始化参数(dwrActionProcessor)。处理器必须实现 org.directwebremoting.webwork.IDWRActionProcessor 接口。这个处理器将会在 action 之前和之后被调用,所以你可以做一些预处理或改变结果