当前位置: 代码迷 >> Java Web开发 >> DWR3.0中在Js客户端调用参数类型为Map、Object的Java方法时出现转换有关问题
  详细解决方案

DWR3.0中在Js客户端调用参数类型为Map、Object的Java方法时出现转换有关问题

热度:710   发布时间:2016-04-17 00:21:01.0
DWR3.0中在Js客户端调用参数类型为Map、Object的Java方法时出现转换问题
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等,猜测它对返回值不作额外要求,对方法参数有更严格要求
------解决方案--------------------
探讨

我没实际用过,只是猜测:
  相关解决方案