小弟在做一个项目用到了DWR我在服务器端
一个Bean和一个DTO public class MyBean
 {
   private String s1;
   private String s2; } public class MyDTO
 {
    private Map mapOne;
     
    private Map mapTwo;     /*这两个Map里是这样的结构: 
                       Map
                          key1:ListA
                                 List1
                                     {MyBean1,MyBean2,MyBean3......}
                                 List2
                                     {MyBean5,MyBean6,MyBean7......}
                                 List3
                                   .
                                   .
                          key2:ListB
                                 ListN
                                     {MyBean10,MyBean11,MyBean12.......}
                                 ListN+1
                                  等等     */ }
还有一个服务类public class Service
{
    public void MyService(MyDTO myDTO)
    {
          //业务逻辑操作
    }
}我想在浏览器端调用Service.MyService但是不知道应该在dwr.xml里如何配置方法以及对象的信息在网上找了很多都是方法参数或者返回值是一个List,Map里面放对象的没有一个对象里含有Map和List的所以才来请教大家希望高手们指点指点谢谢

解决方案 »

  1.   

    DWR配置 <create creator="new" javascript="service">
    <param name="class" value="com.SysService" />
    </create>
    <convert converter="bean" match="com.Desk">
    <param name="include" value="Id,Name,persons" />
    </convert>JS
    回调获得一个LIST
    service.你的MyService--返回一个LIST(参数,,callback--回凋)
    var dList = callback();
    获得属性:
    dList[i].persons,deskList[i].persons
      

  2.   

    说白了就是我在想通过DWR调用服务器端的Service类的MyService方法这个方法的参数是一个MyDTO对象该对象里的两个属性是两个mapmap 里放的是数不清的List,List里放的又是数不清的List最后这层List里放的是数不清的MyBean对象我应该在JavaScript代码里如何调用这个方法,给它传什么样的参数在dwr.xml里我应该怎么配置这些方法,对象参数
      

  3.   

    dwr提示因为 MyDTO的set方法的参数是一个Map所以要我写signatures标签来声明一下但是我试了下写MyDTO.setMapOne(Map<String,List>);还是不行
      

  4.   

    在signatures里写MyDTO.setMapOne(Map <String,List>); 虽然不行,但是已经可以把数据传输到后台了问题在于,DWR没有把浏览器端放在List里的对象转换成MyBean对象我想应该是在dwr.xml里声明一下List应该放什么对象比如MyDTO.setMapOne(Map <String,List<MyBean>>);但是很遗憾,DWR报错说List<MyBean>不是正确声明的类型现在的问题就是如何让DWR知道List里要加载的对象是MyBean而不是一个字符串不知道是不是有高人会指点我一下啊~继续等
      

  5.   

    在java这个层把那个对象拆成字符串集合,然后到了js里边再解析出来。
      

  6.   

    用json数据格式进行数据交互.
      

  7.   


    ajax作为前后台通信的一种技术,涉及到复杂数据结构的内容传输,
    我一般采用json进行编码。json是一种字符串数据,类似于xml,但比Xml简单很多,
    实用json的最大优势在于:
    java object <-- --> json string <-- --> Javascript object这三种格式互转都有现成的API支持。这就意味着,ajax的后台代码生成的java object数据,直接转成字符串,
    通过ajax传到前台,然后在前台转成javascript对象使用,结构基本保持一致。
      

  8.   

    首先dwr.xml中要配置转换器和执行类
       
    <dwr>
    <allow>
                    <!--转换器,如果你的数据结构是bean里面还有bean,则所有的bean都得配置转换器-->
    <convert match="com.fly.entity.SvseSatisfactionOrder" converter="bean">
    <param name="include" value="svseEmployee,svseCourse,svseClass"></param>
    </convert>

                    <!--配置dwr调用的类方法-->
    <create javascript="orderService" creator="new">
    <param name="class" value="com.fly.service.OrderService"></param>
    <include method="getQualificationById"/>
    </create>
    </allow>
    </dwr>
      
    其次,在页面js调用代码如下:
    orderService.getQualificationById(data,callback);  //orderService是指你配置的dwr.xml文件的create javascript,callback是指的回调函数,
    这里的data可以为多个,是指你要传入给service方法的参数
      

  9.   


    这是绝对不可行的~把对象拆成字符串集合要看你这个对象有多复杂要是一个对象里只有String,int,Date之类的东西拆的话还可以考虑现在的结构是 DTO里有Map,map里有List,List里还有List,然后才是Bean这要是拆了,上哪记住这些复杂的关系啊?
      

  10.   


    星星多了就是不一样说到我心坎里去了我现在也是在看JSON呵呵~在一个外国的论坛里有人回复我的问题了DWR目前的版本不支持我要的这种复杂的数据结构要么用DWR想想其他解决办法要么抛弃DWR,用其他工具/框架解决DWR官方网站上的说明也找到了,并且印证了这一说法这两天英语阅读水平也有了显著的提高啊~呵呵感谢大家我再加100分
      

  11.   

    我觉得dwr在封装ajax方面很好,但我从来没有用过dwr的自定义数据转换机制,
    我都是用json传数据,比你这复杂的多的都传过。json使用的时候要注意在前台js中,因为实现的代码有很多变体,我遇到过一种实现,在字符串超过几K后,转换速度奇慢。英语很重要,继续努力。