接续《jsp页面返回提示,用ajax让页面返回提示框》这篇文章,实现dwr实时查询数据库的扩展应用
一、jsp中应写的代码
在jsp的<head>中插入运行dwr得来的三个js
如果是无论你在做什么在哪个页面都要弹出提醒的话,你就要把它放在一个权限最大的外层页面中
<script type="text/javascript" src="<%=ctxPath%>/dwr/util.js"></script><script type="text/javascript" src="<%=ctxPath%>/dwr/engine.js"></script><script type="text/javascript" src="<%=ctxPath%>/dwr/interface/remind.js"></script>
<% User user = (User) request.getSession().getAttribute(snt.hpcc.util.Constant.USER_KEY); request.setAttribute("user", user); if("A".equals(user.getUser_role())){//这个是根据我的需求做的角色判定,A角色登录的时候才可以看见这个功能 %> <mce:script type="text/javascript"><!-- window.setInterval("queryRemind()",2000);//设置每隔2秒执行一次queryRemind()方法 function queryRemind() { var count = remind.queryDailyRemind(callBackFun); //remind是js的名字queryDailyRemind(callBackFun)引用的是当前js的Service中的方法名 } function callBackFun(data)//回调函数,用于取得queryDailyRemind()的返回值 { var flag = ""; flag = data; if(flag != "0"){//如果查询的记录不为0条,那么就指向查询预约记录详细信息的方法,弹出提示框,提示查询到的预约记录 var url = "<%=ctxPath%>/visitor.do?cmd=remindQuery"; window.open(url,'','align=center,resizable=no,left=500,top=400,width=500,height=300,menubar=no,toolbar=no,status=no,location=no,scrollbars=yes'); } } // --></mce:script> <%} %>
二、Java代码及SQL
// 查询当前时间内的预约记录有几条 public String findDailyRemind(Long visitor_pk, Long proId) throws DataAccessException, BaseBizException { User user = (snt.hpcc.business.account.User) WebUtils.getSessionData(Constant.USER_KEY); visitor_pk =user.getPk_id(); try{ // 准备sql语句 StringBuffer sql = new StringBuffer(); sql.append(" select count(*) from hp_accounts a"); sql.append(" join hp_assignment b on a.pk_id = b.account_pk"); sql.append(" where b.visitor_pk= ").append(visitor_pk); sql.append(" and a.dialup_mark like '").append(Constant.DIAL_STATE_ORDER).append("'"); sql.append(" and dateadd(Minute,-20,a.order_date) between dateadd(Second,-2,getdate()) and getdate()");//在预约时间的提前20分钟弹出提醒,最后一个and条件意思是,(预约时间-20分钟)在当前的服务器数据库系统时间的现在和前两秒之内,能查到数据就弹出提醒 // 返回查询结果 String count = commonDAO.queryForSimpObject(sql.toString(), String.class); return count; } catch (DataAccessException e) { log.error(e,e); throw new BaseBizException("数据库访问出错",e); } }
//查询详细的预约记录 public List<Map> queryRemindDate(Long visitor_pk, Long proId){ //准备sql语句 StringBuffer sql = new StringBuffer(); sql.append(" select distinct b.account_pk,c.case_name,a.corpname,a.order_date from hp_accounts a"); sql.append(" join hp_assignment b on a.pk_id = b.account_pk"); sql.append(" left join hp_case_info c on c.pk_id = b.case_pk"); sql.append(" where b.visitor_pk= ").append(visitor_pk); sql.append(" and a.dialup_mark like '").append(Constant.DIAL_STATE_ORDER).append("'"); sql.append(" and dateadd(Minute,-20,a.order_date) between dateadd(Second,-5,getdate()) and dateadd(Second,+30,getdate())"); List<Map> remindList =commonDAO.queryForMapList(sql.toString()); return remindList;//查完返回将要弹出的页面remindList在strust_config.xml中指向dialupRemind.jsp页面 }
三、弹出提示的jsp页面
dialupRemind.jsp 此处省略1000字。。。。。。哈哈,自己写咯!