如何使用DWR更新用户列表

时间:2011-04-22 17:01:27

标签: java servlets dwr

我正在开发可以连接到Gtalk和Facebook的聊天客户端。我正在使用DWR。

登录后,我必须填写用户列表。在客户端我有

function showUsersOnline() {
    var cellFuncs = [ function(user) {

        return '<i>'+user+'</i>';
    } ];
    LoginG.usersOnline( {
        callback : function(users) {
            dwr.util.removeAllRows('usersOnline');
            dwr.util.addRows("usersOnline", users, cellFuncs, {
                escapeHtml : false
            });

在服务器端,我使用Smack Api获取名单(在线)

public void usersOnline() {
    Roster roster = connection.getRoster();
    Collection<RosterEntry> entries = roster.getEntries();
    System.out.println(roster.getEntryCount());
    int count1 = 0;
    int count2 = 0;
    for (RosterEntry r : entries) {
        String user = r.getUser();
        Presence presence = roster.getPresence(user);
        if (presence.getType() == Presence.Type.available) {
            System.out.println(user + " is online");
            count1++;

        } else {
            System.out.println(user + " is offline");
            count2++;
        }

现在我应该将数据作为JSON返回,还是DWR可以处理集合的方式???

1 个答案:

答案 0 :(得分:0)

如果修改服务器方法usersOnline()以返回Collection<RosterEntry>对象,则DWR将在回调函数的参数中填充该函数,在您的情况下为function(users)。因此,在将调用返回到回调函数function(users)之后,您可以通过users对象获取服务器端方法对其进行的更新。 users对象需要像array一样遍历,因为您返回的是CollectionList

这是你在找什么?有关详情,请参阅here