论坛首页 入门技术论坛

SSH+Extjs分页小例子

浏览 12964 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-05  
刚学,只做了简单的分页显示,借鉴别人的,网址忘了,呵呵
数据库:
   news表(id,newsTypeId,newsTitle,newsContent,newsDateTime)
   newstype表(id,newstypeName)

NewsDAO.java
//一页显示的新闻
public List findPageAll(final int start,final int limit){
  return getHibernateTemplate().executeFind(new HibernateCallback(){
   public Object doInHibernate(Session session)
     throws HibernateException, SQLException {
    Query q = session.createQuery("from News n left join fetch n.newstype");
    q.setFirstResult(start*limit);
    q.setMaxResults(limit);
    return q.list();
   }   
  });
 }
//得到记录总条数
public int totalRecord(){
  int count = 0;
  Long l = (Long)getHibernateTemplate().execute(new HibernateCallback(){
   public Object doInHibernate(Session session)
     throws HibernateException, SQLException {
    Query q = session.createQuery("select count(n.id) from News n");
    return q.uniqueResult();
   }  
  });
  count = l.intValue();
  return count;
 }

NewsAction.java

public ActionForward list(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 
  int totalProperty = adminService.totalPropertyByNews();
  int start;
  try {
   start = Integer.parseInt(request.getParameter("start"));
  } catch (NumberFormatException e1) {
   start = 0;
  }
  int limit;
  try {
   limit = Integer.parseInt(request.getParameter("limit"));
  } catch (NumberFormatException e1) {
   limit = 2 ;
  }  
  if(start>0)  
   start = start/limit;  
  //Hibernate级联时,用json有错误,要把被级联的那个对象干掉,这样就没法显示被级联的对象了
//  JsonConfig conf = new JsonConfig();
//  conf.setExcludes(new String[]{"newstype"});
  
  List list = adminService.findPageAllNews(start, limit);
  JSONArray jsonArray = new JSONArray();
  Iterator ite = list.iterator();
//对list转变成的ite进行遍历,得到每个对象,并put到map里,再把map放到json数组里
  while(ite.hasNext()){
   News news = (News) ite.next();
   Map map = new HashMap();
   map.put("id", news.getId());
   map.put("newstype", news.getNewstype().getNewstypeName());
   map.put("newsTitle", news.getNewsTitle());
   map.put("newsContent", news.getNewsContent());
   String time = new SimpleDateFormat("yyyy-MM-dd").format(news.getNewsDateTime());
   map.put("newsDateTime", time);
   jsonArray.add(map);
  }    
  String jsonStr = jsonArray.toString();
//为了分页,要加上start,limit,totalProperty,下面的符合json数据的形式
  String jsonString = "{start:"+start+",limit:"+limit+",totalProperty:"+totalProperty+",newsList:"+jsonStr+"}";
  response.setContentType("text/html;charset=utf-8");  
  try {   //输出来,到jsp页面调用
   response.getWriter().write(jsonString);
  } catch (IOException e) {   
   e.printStackTrace();
  }
  return null;//返回null
 }
 


newsList.jsp
<script type="text/javascript">
		Ext.onReady(function(){
			var sm = new Ext.grid.CheckboxSelectionModel();
			var store =	new Ext.data.Store({
				proxy: new Ext.data.HttpProxy({
					url:"news.do?method=list",
					method:"post"
				}),
				reader: new Ext.data.JsonReader({//读取json数据
					root:'newsList',						//
					totalProperty:'totalProperty',	//总记录数
					id:'id'					
					},[{name:'id'},
						{name:'newstype'},
						{name:'newsTitle'},
						{name:'newsContent'},
						{name:'newsDateTime'}
					])					
			});			
			//创建列
			var column = new Ext.grid.ColumnModel([				
				sm,														//复选框
				{header:'编号',dataIndex:'id'},
				{header:'类型',dataIndex:'newstype',
					renderer:function(value){
							if(value=="国内新闻")
								return "<font color='red'>国内新闻</span>";
					}
				},
				{header:'标题',dataIndex:'newsTitle'},
				{header:'内容',dataIndex:'newsContent'},
				{header:'时间',dataIndex:'newsDateTime'}				
			]);
			column.defaultSortable = true;//默认可排序
			//创建一个工具条
			var tba = new Ext.Toolbar();
					
			//面板
			var grid = new Ext.grid.GridPanel({
				el:'showNews',
				width:600,
				height:300,
				title:'新闻列表',
				store:store,
				cm:column,							//创建的列
				trackMouseOver:false,
				autoScroll: true,
				loadMask: {msg:'正在加载数据,请稍侯……'},
				sm:sm,				
				//下边
				bbar:new Ext.PagingToolbar({
					pageSize:2,
					store:store,
					displayInfo:true,
					displayMsg:'显示第 {0} 条到 {1} 条记录,一共 {2} 条',
					emptyMsg:'没有记录'
				})
			});			    
			grid.render();			
			store.load({params:{start:0,limit:2 }});					
		});
	 </script>

<body>
    <div id="showNews" ></div>
</body>

   发表时间:2008-11-11  
谢谢啦!楼主辛苦了!写的很详细啊!
0 请登录后投票
   发表时间:2008-11-11  
如果你面对海量数据,这样做就没意义啦...
0 请登录后投票
   发表时间:2008-11-11  
zhongnanhai.8 写道
如果你面对海量数据,这样做就没意义啦...

不是每个人人都有机会面对海量数据的。
整个地球村 真正玩过海量数据的人,也曲指可数吧,似乎
0 请登录后投票
   发表时间:2008-11-11  
zhongnanhai.8 写道
如果你面对海量数据,这样做就没意义啦...


即然 你有此一说,贴上来一段处理海量的,让我们学习学习。谢谢先。
0 请登录后投票
   发表时间:2008-11-13  
justry 写道

zhongnanhai.8 写道
如果你面对海量数据,这样做就没意义啦... 即然 你有此一说,贴上来一段处理海量的,让我们学习学习。谢谢先。

首先,谢谢您的建议,但是我对ExtJs了解的少之又少,刚开始学,可以让和我遇到同样问题的人借鉴借鉴,献丑了。
0 请登录后投票
   发表时间:2008-12-08  
fxzjdtk   谢谢分享 偶是ext新手 学习学习再学习!
0 请登录后投票
   发表时间:2008-12-30  
zt843217 写道

fxzjdtk&nbsp;&nbsp; 谢谢分享 偶是ext新手 学习学习再学习!

我也是菜鸟,不过现在ext先不学了,有点头疼,现在听到ext就乱。
0 请登录后投票
   发表时间:2009-03-17  
楼主是否可以把源码共享出来。  能发我邮箱吗。yanyongqing87@163.com
0 请登录后投票
   发表时间:2009-04-10  
楼主可不可以共享一下这个代码?完整的(带JAR包的),我的邮箱是:yuanyu5237@sina.com,谢谢
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics