dwr反向调用及和调用页面中的通信
import org.directwebremoting.AjaxFilter;
import org.directwebremoting.AjaxFilterChain;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class DwrRequestFilter implements AjaxFilter {
????? //参数说明 arg0调用的类的全限类名;arg1调用的方法名;arg2调用该方法出入的参数
????? //arg3同servlet拦截器中FilterChain作用
????? @Override
?????? public Object doFilter(Object arg0, Method arg1, Object[] arg2,AjaxFilterChain arg3) throws Exception {
?????????? //得到上下文
?????????? WebContext wc = WebContextFactory.get();
?????????? //通过上下文得到ScriptSession,该对象可调用页面中的javascript
?????????? ScriptSession s = wc.getScriptSession();
?????????? //将ScriptSession对象包装为Util,该对象有dwr来调用
?????????? Util u = new Util(s);
????????? //可从上下文中得到request、response、session对象
????????? HttpSession session = wc.getSession();
????????? HttpServletRequest request = wc.getHttpServletRequest();
????????? HttpServletResponse response = wc.getHttpServletResponse();
????????? //调用业务逻辑?
?????????//......
???????? //调用页面中函数名为logOut函数
???????? u.addScript(new ScriptBuffer("logOut()"));
?
???????? //正常提交请求,如果不想提交只需return null即可
???????? return arg3.doFilter(arg0, arg1, arg2);
???? }
}
dwr.xml文件中只需加入
<filter class="DwrRequestFilter"/>就可拦截到所有的dwr请求
?该方法测试版本为dwr3.0