Java代码:public void testSignaturesMapArgs(Map map){
Set<Entry<Object,Object>> entrys = map.entrySet();
for(Entry entry : entrys){
System.out.println(entry.getKey() + " -- " + entry.getKey().getClass().getName());
System.out.println(entry.getValue() + " -- " + entry.getValue().getClass().getName());
}
System.out.println("-------------testSignaturesMapArgs---------------");
}
public void testObjectArgs(Object obj){
System.out.println(obj + " -- " + obj.getClass().getName());
System.out.println("-------------testObjectArgs----------------------");
}JavaScript代码:function testSignaturesMapArgs(){
var arg = {
"_userBean":{userId:"1",userName:"Go",userPass:"123"}
};
server.testSignaturesMapArgs(arg);
}
function testObjectArgs(){
server.testObjectArgs("Go");
}dwr.xml配置文件:<dwr>
<allow>
<!--
creator:对象创建策略。
javascript:在JavaScript中使用时的对象名称。
scope:作用域。
-->
<create creator="new" javascript="server" scope="script">
<param name="class">org.dwr.server.Server</param>
</create>
<!--
converter:已经预定义过了的转换策略,例如:bean转换策略。
match:需要转换的符合该匹配条件的JavaBean的完整类名,可以使用通配符"*"。
javascript:在JavaScript中使用时的类名(new User())。
-->
<convert converter="bean" match="org.dwr.bean.UserBean"/>
</allow>
<!--
对方法参数的额外描述
-->
<signatures>
<![CDATA[
import java.util.List;
import java.util.Map;
import org.dwr.server.Server;
import org.dwr.bean.UserBean;
Server.testSignaturesListArgs(List<UserBean> _dwrList);
Server.testSignaturesMapArgs(Map<String,UserBean> _dwrMap);
Server.testObjectArgs(String _dwrString);
]]>
</signatures>
</dwr>出现的问题是在传参的时候,调用参数为Map类型的方法时,输出的Map的值为:
2011-02-18 09:12:03,0 WARN (org.directwebremoting.util.LocalUtil:1355) - Missing type info for (method=public void org.dwr.server.Server.testSignaturesMapArgs(java.util.Map), parameter: 0). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml
_userBean -- java.lang.String
{userId:reference:c0-e2, userName:reference:c0-e3, userPass:reference:c0-e4} -- java.lang.String
-------------testSignaturesMapArgs---------------
而在调用参数为Object类型的方法时干脆就报错弹出Error对话框。并且输出:
2011-02-18 09:13:13,890 WARN (org.directwebremoting.extend.Call:205) - No methods called class org.dwr.server.Server.testObjectArgs' are applicable for the passed parameters.
不知道为什么?我试过了,调用返回Map、Object的Java方法就算不使用<signatures>标签进行额外的描述也是可以的。
Set<Entry<Object,Object>> entrys = map.entrySet();
for(Entry entry : entrys){
System.out.println(entry.getKey() + " -- " + entry.getKey().getClass().getName());
System.out.println(entry.getValue() + " -- " + entry.getValue().getClass().getName());
}
System.out.println("-------------testSignaturesMapArgs---------------");
}
public void testObjectArgs(Object obj){
System.out.println(obj + " -- " + obj.getClass().getName());
System.out.println("-------------testObjectArgs----------------------");
}JavaScript代码:function testSignaturesMapArgs(){
var arg = {
"_userBean":{userId:"1",userName:"Go",userPass:"123"}
};
server.testSignaturesMapArgs(arg);
}
function testObjectArgs(){
server.testObjectArgs("Go");
}dwr.xml配置文件:<dwr>
<allow>
<!--
creator:对象创建策略。
javascript:在JavaScript中使用时的对象名称。
scope:作用域。
-->
<create creator="new" javascript="server" scope="script">
<param name="class">org.dwr.server.Server</param>
</create>
<!--
converter:已经预定义过了的转换策略,例如:bean转换策略。
match:需要转换的符合该匹配条件的JavaBean的完整类名,可以使用通配符"*"。
javascript:在JavaScript中使用时的类名(new User())。
-->
<convert converter="bean" match="org.dwr.bean.UserBean"/>
</allow>
<!--
对方法参数的额外描述
-->
<signatures>
<![CDATA[
import java.util.List;
import java.util.Map;
import org.dwr.server.Server;
import org.dwr.bean.UserBean;
Server.testSignaturesListArgs(List<UserBean> _dwrList);
Server.testSignaturesMapArgs(Map<String,UserBean> _dwrMap);
Server.testObjectArgs(String _dwrString);
]]>
</signatures>
</dwr>出现的问题是在传参的时候,调用参数为Map类型的方法时,输出的Map的值为:
2011-02-18 09:12:03,0 WARN (org.directwebremoting.util.LocalUtil:1355) - Missing type info for (method=public void org.dwr.server.Server.testSignaturesMapArgs(java.util.Map), parameter: 0). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml
_userBean -- java.lang.String
{userId:reference:c0-e2, userName:reference:c0-e3, userPass:reference:c0-e4} -- java.lang.String
-------------testSignaturesMapArgs---------------
而在调用参数为Object类型的方法时干脆就报错弹出Error对话框。并且输出:
2011-02-18 09:13:13,890 WARN (org.directwebremoting.extend.Call:205) - No methods called class org.dwr.server.Server.testObjectArgs' are applicable for the passed parameters.
不知道为什么?我试过了,调用返回Map、Object的Java方法就算不使用<signatures>标签进行额外的描述也是可以的。
Missing type info for (method=public void org.dwr.server.Server.testSignaturesMapArgs(java.util.Map), parameter: 0). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml它是报丢失类型信息,也就是参数Map的类型信息,dwr可能是需要的,同时与你后面的描述不矛盾,因为你说可以的是返回值为Map Object等,猜测它对返回值不作额外要求,对方法参数有更严格要求
郁闷啊在等等吧希望有人遇到过。