您的位置:首页 > 其它

DWR与SSH 配置

2014-03-11 22:13 204 查看
项目需要用到Ajax,最开始本想用Jquery,最后权衡下选择了DWR。

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

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

需求描述:

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

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

web.xml:

[xhtml]
view plaincopy

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

dwr配置文件:

[xhtml]
view plaincopy

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

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

[xhtml]
view plaincopy

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
default-autowire="byName"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="dwrquery" class="org.huajun.dwr.action.DWRQuery" scope="prototype">
<property name="qes">
<ref bean="qes" />
</property>
</bean>
<bean id="qes" class="org.huajun.dwr.serviceImpl.DWRQueryServiceImpl" scope="prototype">
<property name="qd">
<ref bean="qd" />
</property>
</bean>
<bean id="qd" class="org.huajun.dwr.daoImpl.DWRQueryDaoImpl"></bean>
</beans>

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

[java]
view plaincopy

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

dwr package:

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

DWRQueryDaoImpl:

[java]
view plaincopy

public List<News> getNewsListByTitle(String title,String colid){
try {
String hql="from News as o where o.title like '%"+title.trim()+"%' and o.pubstate='已发布' and o.newscolumn.id='"+colid.trim() +"' order by pubstate desc";
return (List<News>)super.getHibernateTemplate().find(hql);
} catch (RuntimeException re) {
throw re;
}
}

public List<News> getNewsListByPage(final String title,final String colid,final int pageNo,final int pagesize){
final Map<String,List<News>> map=new HashMap<String,List<News>>();
try {
super.getHibernateTemplate().execute(new HibernateCallback<List<News>>()
{
public List<News> doInHibernate(Session session) throws HibernateException, SQLException
{
String hql="from News as o where o.title like '%"+title.trim()+"%' and o.pubstate='已发布' and o.newscolumn.id='"+colid.trim() +"' order by pubstate desc";
Query query = session.createQuery(hql);

int firstindex=(pageNo-1)*pagesize;
query.setFirstResult(firstindex).setMaxResults(pagesize);

List list= query.list();
map.put("map",list);
return null;
}

});
List returnList=map.get("map");
return returnList;
} catch (RuntimeException re) {
throw re;
}
}

DWRQuery :

[java]
view plaincopy

public Map dwrQuery(String title,String colid,int pageNo){
List<News> list=new ArrayList<News>();
list=qes.getNewsListByTitle(title, colid);
//获得总记录数
Integer recordCount=list.size();
//总页数
int pageCount=(int)Math.ceil(recordCount.doubleValue()/this.getPagesize());

list.clear();
list=qes.getNewsListByPage(title, colid, pageNo, this.getPagesize());
Map map=new HashMap();
map.put("recordCount", recordCount);//总记录数
map.put("pageSize", this.getPagesize());//每页显示数
map.put("pageCount", pageCount);//总页数
map.put("dataList", list);//新闻集合

return map;
}

页面:

[b][xhtml]
view plaincopy[/b]

<!-- DWR JS-->
<script type="text/javascript">

currentPage=1;//当前页码全局变量
function changtable(pageNo){
if(pageNo<1){
pageNo=1;//当前页为1
}
currentPage=pageNo;//根据当前页数修改全局变量
var querytitle=document.getElementById("querytitle");//这里是查询字段
//这里调用DWRQuery的dwrQuery方法
showList.dwrQuery(querytitle.value,pageNo,callBackMethod);
}

function callBackMethod(map){
var showmsg=document.getElementById("showmsg");
var colname=document.getElementById("colname").value;
showmsg.innerHTML="";
DWRUtil.removeAllRows("tablebody");
//没有查询到相应记录
if(map['dataList'].length==0){
showmsg.innerHTML="<font color='red'>没有查询到相应记录!</font>";
} else{
//这里调用的DWRUtil.addRows方法可以参考我的上一篇文章
DWRUtil.addRows("tablebody",map['dataList'],
[
function(item){
return " <input type='checkbox' name='checkbox' value='"+item.id+ "' />"
},
function(item){
return "  <a target='_blank' href="pubnews!looknew.action?id="+item.id+"'>" +item.title+"</a>"

},
function(item){return "  "+item.creater},
function(item){return "  "+item.checks}
],
{escapeHtml:false} );
}

showPageBar(map,currentPage);//根据 全局当前页数 调用显示页面导航的函数
}

//显示页码导航
function showPageBar(map,pageNo){
var pageBar=document.getElementById("pageDiv");
var recordCount=map['recordCount'];//总记录数
var pageSize=map['pageSize'];//每页显示记录数
var pageCount=map['pageCount'];//总页数
var pageStr="当前页:第 "+pageNo+" 页 | ";
pageStr+="总记录数: "+recordCount+" 条 | ";
pageStr+="每页显示: "+pageSize+" 条 | ";
pageStr+="总页数: "+pageCount+" 页 | ";
if(pageNo==1){
pageStr += "首 页 上一页 ";
}else{
pageStr += "<a href="javascript:changtable(1)" >首 页</a>
<a href="javascript:changtable("+(pageNo-1)+")" >上一页</a> ";
}
if(pageNo < pageCount){
pageStr += "<a href="javascript:changtable("+(pageNo+1)+")" >
下一页</a> <a href="javascript:changtable("+pageCount+")" >末 页</a> ";
}else{
pageStr += "下一页 末 页 ";
}
pageStr += " ";
pageBar.innerHTML= pageStr;
}
// 引入dwr的js库文件
<script type='text/javascript' src='dwr/interface/showList.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
//展示列表
<table align="center">
<tbody>
<tr>
<th width="28px">
<input type="checkbox" id="allche" value="checkbox"
title="全选/全不选" onclick="allChoose();changeIds();">
</th>
<th >
标题
</th>
<th >
录入者
</th>
<th >
点击数
</th>
</tr>
</tbody>
<tbody id="tablebody">
</tbody>
</table>
<div id="showmsg" align="center">
</div>
<div id="pageDiv" align="right">
</div>

//最终实现的分页效果

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

DWR整合SSH大致总结到这里,粘了比较多的代码。希望能给有类似需求的朋友们提供一点点帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: