导航

DWR

Posted on 2017-02-22 11:31  _eve  阅读(249)  评论(0编辑  收藏  举报

什么是DWR?它有哪些功能?  [中]  

DWR(Direct Web Remoting)是一个WEB远程调用框架.  
可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript  
DWR根据Java类来动态生成JavaScrip代码.  
支持Dom Trees,支持Spring,支持commons-logging  
dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC  
    "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"  
    "http://getahead.org/dwr/dwr20.dtd"> 
<dwr>
<allow>
	<create creator="new" javascript="MsgPush">
       <param name="class" value="com.middleware.dwr.MsgReverseAjax"/>
    </create>
</allow>
</dwr>

 方法里调用

public static void pusMessage(TE_MESSAGE_ALERT message){
		String org_coad = message.getRECEIVE_ORG();
		String af = "pushMessage";
		String type = "null";
		Map<String,String> map = new HashMap<String,String>();
		Message m = null;
		map.put("id",message.getMESSAGE_ID()+"");
		map.put("event_id", message.getEVENT_ID());
		map.put("type", message.getEVENT_TYPE());
		map.put("title", message.getEVENT_TITLE());
		map.put("org_coad", org_coad);
		map.put("if_handle", message.getIF_HANDLE());
		map.put("handle_id", message.getHANDLE_ID());		
		m = new Message(org_coad,type,af,map);
		MsgReverseAjax mra = new MsgReverseAjax();
		mra.update(m);
	}

 MsgReverseAjax.java 执行

package com.middleware.dwr;

import java.util.Date;
import java.util.List;

import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;

public class MsgReverseAjax {

	private UScriptSessionCache ussc = UScriptSessionCache.getInstance();
	
	public MsgReverseAjax() {

	}

	public void update(Message m) {
		List<ScriptSession> list = ussc.all();
		if (list != null && list.size() > 0) {
			System.out.println("time : " + new Date().getTime() + " , push list "+list.size());
			for (ScriptSession ss : list) {
				String msg = m.getMesage();
				ss.addScript(new ScriptBuffer()
							.appendScript(m.getAjaxFunction())
							.appendScript("(").appendData(msg)
							.appendScript(");"));
			}
		}else{
			System.out.println("no scriptsession in cache");
		}
	}
	

}

 

//推送信息
function pushMessage(message) {
	var json_message = eval('(' + message + ')');
	//判断是否为当前机构的
	var org_coad = json_message.org_coad;
	if(org_coad == get_login_detail().subc_id){
		//当前是否有未读通知
		var count = $("#message_alert_count").html();
		var tr_html="<tbody><tr id='"+json_message.id+"' event_id='"+json_message.event_id+"' type='"+json_message.type+"'><td style='text-align: left;cursor:pointer'>"+json_message.title+"</td></tr></tbody>";
		if(count == '0'){//无数据
			var html = "<table class='table_style' id='message_table' style='width=\"%100\"'>";
			html+=tr_html;
			html+="</table>";
			$("#message_alert_info").html(html);
			$("#message_alert_count").html('1');
		}else{//存在数据
			//获取所有通知数据
			var all_html = $("#message_table").html();
			all_html = tr_html + all_html;
			$("#message_table").html(all_html);
			//通知数量+1
			$("#message_alert_count").html(Number(count)+1);
		}
		//如果当前机构是中心
		if(org_coad == '0001'){
			
		}else{//修改审阅状态
			if(json_message.if_handle == '1'){//调度信息
				$("#view_button_"+json_message.handle_id).html("(已审阅)");
			}else{//非调度信息
				if(json_message.type == '2'){//交通肇事
					$(".traffic_accident_view_"+json_message.event_id).html("(已审阅)");
				}else if(type == '3'){//交通阻塞
					$(".view_block_id_"+json_message.event_id).html("(已审阅)");
				}
			}
		}
	}
}