DWR 3 和 Spring 4
DWR 3 and Spring 4
我遇到 DWR 3 和 Spring 4 的问题,这让我发疯。
有一个 class 有两种方法:
package xxx.dwr.services;
@RemoteProxy
public class UnitsService extends DwrSupport {
@RemoteMethod
public List<UnitTreeNode> searchTreeNodes(UnitTreeSearchQuery query) {
...
}
@RemoteMethod
public List<UnitTreeNode> getTreeNodes(String parentNodeId, String clientIdString,boolean searchInHistory) {
...
}
}
当我点击菜单打开单元树页面时,getTreeNodes 被调用并且工作正常,我可以看到树。可以过滤树,在这种情况下,应该调用 searchTreeNodes 方法,但我在浏览器中看到的只是一个 javascript 警告对话框,上面写着 'Error'。
在浏览器的控制台中,我可以看到以下内容:
dwr.engine._debug @ engine.js:984
dwr.engine.defaultErrorHandler @ engine.js:215
(anonymous) @ engine.js:1121
logHandlerEx @ engine.js:2553
handleException @ engine.js:1107
(anonymous) @ VM1365:9
(anonymous) @ VM1365:10
dwr.engine._executeScript @ engine.js:720
stateChange @ engine.js:1791
batch.req.onreadystatechange @ engine.js:1664
Error: undefined, Error
这不是很多信息...
所以我可以在同一个方法中调用一个方法但不能调用另一个方法 class!
数据传输对象如下(带getter和setter的普通bean):
package xxx.dwr.services.dto;
@DataTransferObject
public class UnitTreeNode {
....
}
package xxx.dwr.services.dto;
@DataTransferObject
public class UnitTreeSearchQuery {
private UnitTreeSearchQueryField field;
private String input;
private String clientId;
private boolean searchInHistory;
...
}
package xxx.dwr.services.dto;
@DataTransferObject(converter = EnumConverter.class)
public enum UnitTreeSearchQueryField {
EXTID,
DISPLAYNAME,
ABBRNAME,
NAME,
REMARKS,
LOCATION,
STATE
}
相关servlet配置:
<servlet>
<servlet-name>DwrServlet</servlet-nam1e>
<servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>allowScriptTagRemoting</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<!-- disabled due to reverse proxy setup -->
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<!-- suppress the about DWR url -->
<param-name>url:/about</param-name>
<param-value>null</param-value>
</init-param>
</servlet>
并且来自 context.xml
<dwr:configuration/>
<dwr:annotation-scan base-package="xxx.dwr.services" scanDataTransferObject="true" scanRemoteProxy="true" />
所以我完全不知道会出什么问题。 Spring 配置应该没问题,因为我可以从 Web 应用程序调用其中一种方法。
你能帮帮我吗?
谢谢,
五、
不知道为什么,但我无法将参数作为对象发送。现在我执行以下操作(传递简单参数):
@RemoteMethod
public List<UnitTreeNode> searchTreeNodes(String field, String input, String clientId, String searchInHistory) {
而且有效。
我遇到 DWR 3 和 Spring 4 的问题,这让我发疯。
有一个 class 有两种方法:
package xxx.dwr.services;
@RemoteProxy
public class UnitsService extends DwrSupport {
@RemoteMethod
public List<UnitTreeNode> searchTreeNodes(UnitTreeSearchQuery query) {
...
}
@RemoteMethod
public List<UnitTreeNode> getTreeNodes(String parentNodeId, String clientIdString,boolean searchInHistory) {
...
}
}
当我点击菜单打开单元树页面时,getTreeNodes 被调用并且工作正常,我可以看到树。可以过滤树,在这种情况下,应该调用 searchTreeNodes 方法,但我在浏览器中看到的只是一个 javascript 警告对话框,上面写着 'Error'。
在浏览器的控制台中,我可以看到以下内容:
dwr.engine._debug @ engine.js:984
dwr.engine.defaultErrorHandler @ engine.js:215
(anonymous) @ engine.js:1121
logHandlerEx @ engine.js:2553
handleException @ engine.js:1107
(anonymous) @ VM1365:9
(anonymous) @ VM1365:10
dwr.engine._executeScript @ engine.js:720
stateChange @ engine.js:1791
batch.req.onreadystatechange @ engine.js:1664
Error: undefined, Error
这不是很多信息...
所以我可以在同一个方法中调用一个方法但不能调用另一个方法 class!
数据传输对象如下(带getter和setter的普通bean):
package xxx.dwr.services.dto;
@DataTransferObject
public class UnitTreeNode {
....
}
package xxx.dwr.services.dto;
@DataTransferObject
public class UnitTreeSearchQuery {
private UnitTreeSearchQueryField field;
private String input;
private String clientId;
private boolean searchInHistory;
...
}
package xxx.dwr.services.dto;
@DataTransferObject(converter = EnumConverter.class)
public enum UnitTreeSearchQueryField {
EXTID,
DISPLAYNAME,
ABBRNAME,
NAME,
REMARKS,
LOCATION,
STATE
}
相关servlet配置:
<servlet>
<servlet-name>DwrServlet</servlet-nam1e>
<servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>allowScriptTagRemoting</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<!-- disabled due to reverse proxy setup -->
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<!-- suppress the about DWR url -->
<param-name>url:/about</param-name>
<param-value>null</param-value>
</init-param>
</servlet>
并且来自 context.xml
<dwr:configuration/>
<dwr:annotation-scan base-package="xxx.dwr.services" scanDataTransferObject="true" scanRemoteProxy="true" />
所以我完全不知道会出什么问题。 Spring 配置应该没问题,因为我可以从 Web 应用程序调用其中一种方法。
你能帮帮我吗?
谢谢,
五、
不知道为什么,但我无法将参数作为对象发送。现在我执行以下操作(传递简单参数):
@RemoteMethod
public List<UnitTreeNode> searchTreeNodes(String field, String input, String clientId, String searchInHistory) {
而且有效。