浏览 5938 次
锁定老帖子 主题:DWR的推送
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-02
我用struts2+spring+hibernate,ajax库用的jquery,发现jquery跟dwr的util.js冲突,不知道如何使用dwr的util.js. 首先,在web.xml中配置dwr(dwr版本为version: 2.0.3): <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class> org.directwebremoting.servlet.DwrServlet </servlet-class> <init-param> <description>false</description> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <init-param> <description>AJAX</description> <param-name>activeReverseAjaxEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name> initApplicationScopeCreatorsAtStartup </param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>maxWaitAfterWrite</param-name> <param-value>100</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> 然后,写struts2的action类: public class BaseAction extends ActionSupport implements ServletContextAware,java.io.Serializable { protected ServletContext servletContext; public void setServletContext(ServletContext arg0) { this.servletContext = arg0; } public void outMessage(String msg) { ServerContext wctx = ServerContextFactory.get(this.servletContext); ScriptSession scriptSessions = null; Collection<ScriptSession> sessions = wctx.getAllScriptSessions (); msg = MessageUtil.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss") + " \t"+ msg; ScriptBuffer script = new ScriptBuffer(); script.appendScript("showMessage(") .appendData(msg) .appendScript(");"); for (ScriptSession session : sessions) { session.addScript(script); } } } 然后,注册action到spring中: <bean id="baseAction" class="com.fsc.frame.base.web.BaseAction" /> 然后,注册dwr.xml文件: <allow> <create creator="spring" javascript="Msg"> <param name="beanName" value="baseAction"/> </create> </allow> 然后就是写页面,即将服务器消息推送到页面上: <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <table CLASS="body_bottom" width="98%" align="center"> <tr> <td width="95%"> <textarea rows='5' id="message" name="STATUS_MESSAGE" ReadOnly style="width:100%" class="CSS_TextArea"></textarea> </td> </tr> </table> <script type='text/javascript' src='dwr/interface/Msg.js'></script> <script type='text/javascript' src='dwr/engine.js'></script> <script type='text/javascript'> /** * 页面初始化 */ function init() { dwr.engine.setActiveReverseAjax(true); // 激活反转 重要 } window.onload = init;//页面加载完毕后执行初始化方法init function showMessage(msg) { var htmlMsg = $("#message").val() + msg + "\n"; $("#message").val(htmlMsg); document.all.STATUS_MESSAGE.scrollTop = document.all.STATUS_MESSAGE.scrollHeight; } </script> 这样一个完整的应用就完成了. 需要注意的是,在action里输出到页面上的script方法必须要先在页面上进行定义. 问题: 1. Collection<ScriptSession> sessions = new HashSet<ScriptSession>(); sessions.addAll(ServerContextFactory.get(this.servletContext).getScriptSessionsByPage("/framework/footer.jsp")); 为啥这么写得不到页面session呢?那位知道麻烦说下. 2. 如何才能避免jquery跟dwr的util.js的冲突? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-24
兄弟,我遇到了你第一个问题,估计是Struts的原因,但是还没找到解决的办法。你解决了吗?
|
|
返回顶楼 | |
发表时间:2009-03-13
$ 符号是jquery和 dwr冲突的原因 你查下 jquery 的文档,里面有个解决的办法,就是jquery 不再使用 $ 符号 用 jQuery 代替,这样可能会影响 你的jquery 插件
|
|
返回顶楼 | |