DWR整合SSH

目需要用到Ajax,最开始本想用Jquery,最后权衡下选择了DWR

这里说的是DWR整合SSH,其实DWR完全没有必要和Struts2结合,毕竟DWR需要返回的是Object,而Struts2直接转向了页面。非要强制将二者整合,只能做一个伪Action,这个伪Action返回的还是Object。当然DWRSpringHibernate结合就非常好,可以将Struts2戏称为小三了 O(_)O ~

扯得有点远了,步入正题。

需求描述:

根据新闻标题(title)利用Ajax模糊查询新闻集合(这里将这些新闻集合称之为 相关新闻),并将得到的相关新闻在页面以列表的形式展示出来,且需要实现分页。

框架搭建(这里只讲与DWR有关的配置,DWR--Version: 2.0.1à

web.xml

  1. <listener>           
  2. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  3. </listener>  
  4. <servlet>  
  5.     <servlet-name>dwr-invoker</servlet-name>       
  6. <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>  
  7.              <init-param>  
  8.                 <param-name>debug</param-name>  
  9.                 <param-value>true</param-value>  
  10.             </init-param>  
  11. </servlet>  
  12. <servlet-mapping>  
  13.          <servlet-name>dwr-invoker</servlet-name>  
  14.          <url-pattern>/dwr/*</url-pattern>  
  15. </servlet-mapping>  

 

dwr配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting   
  3. 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd" >  
  4. <dwr>  
  5.     <allow>  
  6.         <create javascript="showList" creator="spring"  
  7.             scope="application">  
  8.             <param name="beanName" value="dwrquery" />    
  9.         </create>        
  10.         <convert match="org.huajun.news.bean.News" converter="bean">     
  11.         </convert>           
  12.         <convert converter="bean" match="java.lang.StackTraceElement" />  
  13.         <convert converter="exception" match="java.lang.Exception" />  
  14.     </allow>  
  15. </dwr>  

 

 

dwrspring配置文件(这里将其单独作为一个配置文件,需将其importapplicationContext.xml内,这里将伪action交于spring代管):

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     default-autowire="byName"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">      
  6.     <bean id="dwrquery" class="org.huajun.dwr.action.DWRQuery" scope="prototype">  
  7.         <property name="qes">  
  8.             <ref bean="qes" />    
  9.         </property>  
  10.     </bean>      
  11.     <bean id="qes" class="org.huajun.dwr.serviceImpl.DWRQueryServiceImpl" scope="prototype">  
  12.          <property name="qd">  
  13.             <ref bean="qd" />    
  14.         </property>  
  15.     </bean>      
  16.     <bean id="qd" class="org.huajun.dwr.daoImpl.DWRQueryDaoImpl"></bean>       
  17. </beans>  

 

新闻Bean(只列举出页面列表迭代用到的字段):

  1. private String title;//标题   
  2. private String creater;//录入人   
  3. private int checks;//点击数  

 

dwr package

 

 由于service只是简单的dao的引用,所以这里只列出核心的两个类: DWRQueryDaoImpl 和DWRQuery (DWRQuery--这个伪Action的小三)

DWRQueryDaoImpl:

 

DWRQuery

  1. public class DWRQuery {   
  2.     private DWRQueryService qes; //service   
  3.     private String title;//   
  4.     private int pagesize=10;//默认每页显示10条记录   
  5.        
  6.     /**  
  7.      * DWR 进行相关新闻分页显示  
  8.      * pageNo 页码,从 1 开始  
  9.      * pageSize 每页的记录数  
  10.      * 此处返回的是Map  
  11.      */  
  12.     @SuppressWarnings("unchecked")   
  13.     public Map dwrQuery(String title, int pageNo){   
  14.         List<News> list=new ArrayList<News>();   
  15.         list=qes.getNewsListByTitle(title, colid);   
  16.         //获得总记录数   
  17.         Integer recordCount=list.size();   
  18.         //总页数   
  19.         int pageCount=(int)Math.ceil(recordCount.doubleValue()/this.getPagesize());   
  20.            
  21.         list.clear();   
  22.         list=qes.getNewsListByPage(title, pageNo, this.getPagesize());   
  23.         Map map=new HashMap();   
  24.         map.put("recordCount", recordCount);//总记录数   
  25.         map.put("pageSize"this.getPagesize());//每页显示数   
  26.         map.put("pageCount", pageCount);//总页数   
  27.         map.put("dataList", list);//相关新闻集合   
  28.            
  29.         return map;   
  30.     }   
  31. //setter and getter ……   
  32. }  

 

 

 

 页面展示.jsp(只列出了DWR用到的JS和相关新闻展示列表):

  1. <!-- DWR JS-->       
  2.   <script type="text/javascript">  
  3.       
  4.    currentPage=1;//当前页码全局变量   
  5.    function changtable(pageNo){    
  6.      if(pageNo<1){   
  7.       pageNo=1;//当前页为1   
  8.      }   
  9.      currentPage=pageNo;//根据当前页数修改全局变量   
  10.      var querytitle=document.getElementById("querytitle");//这里是查询字段   
  11.      //这里调用DWRQuery的dwrQuery方法   
  12.      showList.dwrQuery(querytitle.value,pageNo,callBackMethod);           
  13.     }      
  14.   
  15.    function callBackMethod(map){    
  16.      var showmsg=document.getElementById("showmsg");       
  17.      var colname=document.getElementById("colname").value;     
  18.      showmsg.innerHTML="";   
  19.      DWRUtil.removeAllRows("tablebody");     
  20.      //没有查询到相应记录   
  21.      if(map['dataList'].length==0){   
  22.         showmsg.innerHTML="<font color='red'>没有查询到相应记录!</font>";   
  23.      } else{   
  24.         //这里调用的DWRUtil.addRows方法可以参考我的上一篇文章   
  25.          DWRUtil.addRows("tablebody",map['dataList'],   
  26.          [   
  27.          function(item){   
  28.             return "&nbsp;<input type='checkbox' name='checkbox' value='"+item.id+ "' />"   
  29.         },   
  30.          function(item){                               
  31. return "&nbsp;&nbsp;<a target='_blank' href="pubnews!looknew.action?id="+item.id+"'>" +item.title+"</a>"   
  32.                            
  33.         },      
  34.         function(item){return "&nbsp;&nbsp;"+item.creater},   
  35.         function(item){return "&nbsp;&nbsp;"+item.checks}   
  36.          ],   
  37.         {escapeHtml:false} );      
  38.       }   
  39.          
  40.       showPageBar(map,currentPage);//根据 全局当前页数 调用显示页面导航的函数    
  41. }      
  42.       
  43.       
  44.    //显示页码导航    
  45.    function showPageBar(map,pageNo){     
  46.     var pageBar=document.getElementById("pageDiv");      
  47.     var recordCount=map['recordCount'];//总记录数   
  48.     var pageSize=map['pageSize'];//每页显示记录数   
  49.     var pageCount=map['pageCount'];//总页数   
  50.     var pageStr="当前页:第 "+pageNo+" 页 | ";   
  51.     pageStr+="总记录数: "+recordCount+" 条 | ";   
  52.     pageStr+="每页显示: "+pageSize+" 条 | ";   
  53.     pageStr+="总页数: "+pageCount+" 页 | ";   
  54.     if(pageNo==1){   
  55.         pageStr += "首 页 上一页 ";        
  56.     }else{   
  57.         pageStr += "<a href="javascript:changtable(1)" >首 页</a>    
  58.      <a href="javascript:changtable("+(pageNo-1)+")" >上一页</a> ";        
  59.     }   
  60.     if(pageNo < pageCount){            
  61.         pageStr += "<a href="javascript:changtable("+(pageNo+1)+")" >  
  62.     下一页</a> <a href="javascript:changtable("+pageCount+")" >末 页</a> ";        
  63.     }else{   
  64.         pageStr += "下一页 末 页 ";    
  65.     }          
  66.     pageStr += "&nbsp;";        
  67.     pageBar.innerHTMLpageStr;   
  68.    }    
  69. // 引入dwr的js库文件   
  70. <script type='text/javascript'  src='dwr/interface/showList.js'></script>        
  71. <script type='text/javascript' src='dwr/engine.js'></script>       
  72. <script type='text/javascript' src='dwr/util.js'></script>     
  73. //展示列表   
  74.                <table align="center">  
  75.                     <tbody>  
  76.                     <tr>  
  77.                         <th width="28px">  
  78.                             <input type="checkbox" id="allche" value="checkbox"  
  79.                                 title="全选/全不选" onclick="allChoose();changeIds();">  
  80.                         </th>  
  81.                         <th >  
  82.                             标题   
  83.                         </th>  
  84.                         <th >  
  85.                             录入者   
  86.                         </th>  
  87.                         <th >  
  88.                             点击数   
  89.                         </th>  
  90.                     </tr>    
  91.                     </tbody>  
  92.                     <tbody id="tablebody">  
  93.                     </tbody>      
  94.                 </table>    
  95.                 <div id="showmsg" align="center">  
  96.                 </div>  
  97.                 <div id="pageDiv" align="right">  
  98.                 </div>  

 

 

 

 //最终实现的分页效果

 

当前页: 1 | 总记录数: 21 | 每页显示: 10 | 总页数: 3 | 上一页 下一页

  1. public class DWRQueryDaoImpl extends HibernateDaoSupport implements DWRQueryDao {   
  2.        
  3.     //此方法用于普通查询   
  4.     public List<News> getNewsListByTitle(String title){   
  5.         try {   
  6.                 String hql="from News as o where o.title like '%"+title.trim()+"%';   
  7.             return (List<News>)super.getHibernateTemplate().find(hql);   
  8.         } catch (RuntimeException re) {   
  9.             throw re;   
  10.         }   
  11.     }   
  12.        
  13.     //此方法用于dwr分页查询,其实质用的还是Hibernate的分页技术   
  14.     //pageNo :当前页数   
  15.     //pagesize:每页显示的记录数   
  16.     public List<News> getNewsListByPage(final String title, final int pageNo,final int pagesize){   
  17.         final Map<String,List<News>> map=new HashMap<String,List<News>>();   
  18.         try {   
  19.             super.getHibernateTemplate().execute(new HibernateCallback<List<News>>()   
  20.                     {   
  21.                         public List<News> doInHibernate(Session session) throws HibernateException, SQLException   
  22.                         {   
  23.                                           String hql="from News as o where o.title like '%"+title.trim()+"%';   
  24.                             Query query = session.createQuery(hql);   
  25.                                
  26.                             int firstindex=(pageNo-1)*pagesize;   
  27.                             query.setFirstResult(firstindex).setMaxResults(pagesize);   
  28.                                
  29.                             List list= query.list();   
  30.                             map.put("map",list);   
  31.                             return null;   
  32.                         }   
  33.   
  34.                     });   
  35.             List returnList=map.get("map");   
  36.             return returnList;   
  37.         } catch (RuntimeException re) {   
  38.             throw re;   
  39.         }   
  40.     }   
  41. }  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值