Java代码:
- Java code
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代码:
- JScript code
function testSignaturesMapArgs(){ var arg = { "_userBean":{userId:"1",userName:"Go",userPass:"123"} }; server.testSignaturesMapArgs(arg);} function testObjectArgs(){ server.testObjectArgs("Go");}
dwr.xml配置文件:
- XML code
<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等,猜测它对返回值不作额外要求,对方法参数有更严格要求
------解决方案--------------------