Super_JiaoZi 2009-05-07 23:34
浏览 211
已采纳

如何在action中直接调用dwr的反向ajax类

我现在要用dwr来做反向ajax,有一个功能需要在action中直接调用dwr的反向ajax类,现在我直接调用的话,系统会报空指针异常
我看了一下应该是Collection sessions=context.getScriptSessionsByPage(currentPage);这句话报的。
我觉得应该是WebContext context=WebContextFactory.get();时,因为没有从jsp页面发出请求,所以context得到了一个null。
请问老师,如果我要想直接在action类中通过new的方法直接调用dwr的反向ajax类,应该如何做呢?

dwr类代码如下:

[code="java"]

public class SendMessage {
@SuppressWarnings("unchecked")
public void addMessage(String message)
{

    messages.add(message);
     ScriptBuffer script = new ScriptBuffer();
        script.appendScript("receiveMessages(")
              .appendData(messages)
              .appendScript(");");
              //应该是此处的WebContextFactory.get(),如果我不从jsp页面执行改类,得到一个null
    WebContext context=WebContextFactory.get();
    String currentPage="/index.jsp";
    Collection<ScriptSession> sessions=context.getScriptSessionsByPage(currentPage);
    for(ScriptSession session:sessions)
    {
        session.addScript(script);
    }               
}
private List<String> messages=new LinkedList<String>();

}[/code]

  • 写回答

2条回答 默认 最新

  • iteye_10298 2009-05-09 12:12
    关注

    DWR 2.0存在这个问题,我也遇到过,在JavaEye找到了解决方案,不过并不满意。该方案的大致思路是改写一个DWR类,强制get返回非空的WebContext,但又带来新问题。

    最佳方案:使用DWR 3.0。

    这个问题已经被新的API修正了,同时还增加Browser类,便于处理客户端页面。

    String page = ServerContextFactory.get().getContextPath() + "xxx.jsp";
    Browser.withPage(page,new Runnable() {
    public void run() {
    ScriptSessions.addScript("alert(1)");
    }
    });

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格