据不完全统计,从事Ajax开发的Java程序员有一大半都使用DWR。我们下面来介绍一下如何在EXT中使用DWR与后台交互。
10.10.1 在EXT中直接使用DWR
因为DWR在前台的表现形式和普通的JavaScript完全一样,所以我们不需要特地去做些什么,直接使用EXT调用DWR生成的JavaScript函数即可。以Grid为例,比如现在我们要显示一个通讯录的信息,后台记录的数据有:id、name、sex、email、tel、addTime和descn。编写对应的POJO,代码如下所示。
public class Info { |
public class InfoManager { public List getResult() { |
代码部分有些删减,我们只保留了其中的关键部分,就这样把这两个类配置到dwr.xml中,让前台可以对这些类进行调用。
下面是EXT与DWR交互的关键部分,我们要对JavaScript部分做如下修改,如代码清单10-7所示。
代码清单10-7 使用EXT调用DWR
var cm = new Ext.grid.ColumnModel([ var store = new Ext.data.JsonStore({ // 调用DWR取得数据 var grid = new Ext.grid.GridPanel({ |
注意,执行infoManager.getResult()函数时,DWR就会使用Ajax去后台取数据了,操作成功后调用我们定义的匿名回调函数。在这里我们只做一件事,那就是将返回的data直接注入到ds中。
DWR返回的data可以被JsonStore直接读取,我们需要设置对应的fields参数,以告诉JsonReader需要哪些属性。
在这里,EXT和DWR两者之间没有任何关系,将它们任何一方替换掉都可以。实际上它们只是在一起运行,并没有整合。我们给出的这个示例也是说明了一种松耦合的可能性,实际操作中完全可以使用这种方式。