ext direct spring Polling Method

Server

 

ExtDirectSpring支持轮询服务(POST)和(GET)参数。要配置轮询方法,必须注释@ExtDirectMethod(value = ExtDirectMethodType.POLL, event = "eventName")。这个方法必须是一个Spring管理的bean的成员函数。event属性是事件的名称。如果一个轮询方法需要支持参数,参数需要添加注释@RequestParam。value属性必须对应请求参数的名称,这个参数是可选的如果编译带有调试信息。如果没有value属性Spring试图读参数名从调试信息。

@Service
public class Poll {

  @ExtDirectMethod(value = ExtDirectMethodType.POLL, event = "message1")
  public String handleMessage1() {
    ...
  }

  @ExtDirectMethod(value = ExtDirectMethodType.POLL, event = "message2")
  public int handleMessage2(@RequestParam int id) {
    ...
  }

  @ExtDirectMethod(value = ExtDirectMethodType.POLL, event = "message3")
  public int handleMessage3(@RequestParam(value = "id", defaultValue = "1") int id) {
    ...
  }

  @ExtDirectMethod(value = ExtDirectMethodType.POLL, event = "message4")
  public int handleMessage4(@RequestParam(required = false) Integer id) {
    ...
  }

注释@RequestParam的工作方式跟Spring MVC一致。handleMessage2方法中参数id是强制的,如果请求丢失参数将会抛出异常。handleMessage3的id参数是可选的,如果请求参数没有值,默认值是1.handleMessage4的id参数也是可选的,但将会赋值为null,如果参数没有赋值。

轮询方法的参数签名也可以包含服务器对象参数。

@ExtDirectMethod(value = ExtDirectMethodType.POLL)
public String message5(HttpServletResponse response, HttpServletRequest request,
                       HttpSession session, Locale locale, 
                       @RequestParam(value = "id") int id) {
    ...
}


服务器参数可以出现在任意位置和参数的名称无关。

Client
在JavaScript你可选择配置一个轮询服务提供者直接用new方法或用一个配置对象。

var pollProvider = new Ext.direct.PollingProvider({
    type:'polling',
    url: Ext.app.POLLING_URLS.message1
  });

  //Ext JS 3
  Ext.Direct.addProvider(pollMessage1);

  //Ext JS 4.x and Sencha Touch 2
  Ext.direct.Manager.addProvider(pollMessage1);

  //Ext JS 3.x 
  Ext.Direct.addProvider({
    type: 'polling',
    url: Ext.app.POLLING_URLS.message2,
    baseParams: {
      id: 1
    }
  });

  //Ext JS 4.x and Sencha Touch 2
  Ext.direct.Manager.addProvider({
    type: 'polling',
    url: Ext.app.POLLING_URLS.message2,
    baseParams: {
      id: 1
    }
  });


baseParams是一个特殊的对象,包含的属性在每个轮询请求时会作为参数发送到服务器。

 //Ext JS 3.x 
  Ext.Direct.addProvider({
    id: 'myPollingProvider',
    type: 'polling',
    url: Ext.app.POLLING_URLS.message3,
    interval : 9000
  });

  //Ext JS 4.x and Sencha Touch 2
  Ext.direct.Manager.addProvider({
    id: 'myPollingProvider',
    type: 'polling',
    url: Ext.app.POLLING_URLS.message3,
    interval : 9000
  });  

interval表示多长时间调用一次服务器方法。如上面配置每9秒调用一次handleMessage3方法。轮询方法立刻调用在方法添加到服务提供者。可以暂停和启动轮询方法,调用pollProvider.disconnect()和pollProvider.connect()。如果服务提供者有id,Ext.Direct.getProvider('myPollingProvider') / Ext.direct.Manager.getProvider('myPollingProvider')将会返回服务提供者实例。

Ext JS 3

每次JavaScript调用服务器方法,将会创建一个包含结果的event。用Ext.Direct.on 添加一个监听可以注册这些事件,在监听函数处理返回结果。

Ext.Direct.on({
  message1: function(e) {
    if (true === e.status) {
        //Successful
        Ext.MessageBox.alert("Result", e.data);
      } else {
        //Failure
      }
    },
    message2: function(e) {
      ...
    },
    message3: function(e) {
      ...
    },
});

Ext JS 4.x and Sencha Touch 2

 

Ext.direct.Manager.addProvider({
  type: 'polling',
  url: Ext.app.POLLING_URLS.message3,
  listeners: {
    data: function(provider, e) {
      //first parameter is a reference to PollingProvider that sent the event
      //e event object
    }
  }
});

//OR

var pollProvider = new Ext.direct.PollingProvider({
  type:'polling',
  url: Ext.app.POLLING_URLS.message1
});

pollProvider.addListener('data', callback, scope);


event包含下面这些属性:


data - 服务器方法的返回值
name - 事件名称
status - true方法调用成功,false方法调用失败
type - 'event' 或 'exception' 如果调用失败

Examples

  • http://demo.rasc.ch/eds/extjs3/direct.html
  • http://demo.rasc.ch/eds/extjs3/dynamic.html
  • http://demo.rasc.ch/eds/extjs42/direct.html
  • http://demo.rasc.ch/eds/extjs42/live.html
  • http://demo.rasc.ch/eds/extjs41/direct.html
  • http://demo.rasc.ch/eds/extjs41/live.html


 

你可能感兴趣的:(extjs,ext,direct,spring)