`
fosa0989
  • 浏览: 110606 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

google app: 使用时间类型字段做分页

阅读更多

实现思路是用postDate字段进行排序,使用一个时间点限制取出一页数据。

如果是向下翻页  用postDate < offset  按照postDate desc排序的方法取出下一页数据。

如果向上翻页 用postDate > offset 按照postDate asc 排序的方法取出上一页数据。

存在的问题是如果时间相同的两个记录可能会有一个读取不到。

 

1 Model

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class BlogItem {
	@PrimaryKey    
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Long id;
	@Persistenti
	private String itemTitle;
	@Persistent
	private Text content;
	@Persistent
	private Date postDate;
	@Persistent
	private Date lastUpdateDate;
	@Persistent
	private Long categoryId;
	
	....
}

 2 DAO

	public List<BlogItem> pageList(long offset,boolean down,
			long catId, int countPerPage, boolean loadContent){
		PersistenceManager pm = PMF.get().getPersistenceManager();
		List<BlogItem> bcs;
		Query query = pm.newQuery(BlogItem.class);		
		String filter = "";
		query.setRange(0, countPerPage);
		
		if(catId > 0){
			filter +=(" categoryId==" + catId + " ");
		}
		
		if(offset > 0){
			Date off = new Date(offset);
			if(filter.length()>0) filter +=" && ";	
			if(down){
				filter += (" postDate < offDate ");
				query.setOrdering(" postDate desc");
			}else{
				filter += (" postDate > offDate ");
				query.setOrdering(" postDate asc");
			}

			query.setFilter(filter);			
			query.declareImports("import java.util.Date");
			query.declareParameters("Date offDate");			
			bcs = (List<BlogItem>)query.execute(off);
		}else{
			if(filter.length()>0) query.setFilter(filter);	
			query.setOrdering(" postDate desc");
			bcs = (List<BlogItem>)query.execute();
		}
		
		if(loadContent && bcs != null && bcs.size()>0){
			for(BlogItem bi : bcs)
				bi.getContent();
		}
		
		if(offset > 0 && down == false){
			List<BlogItem> tbcs = new ArrayList<BlogItem>();
			for(BlogItem bi : bcs){
				tbcs.add(0, bi);
			}
			return tbcs;
		}
		
		return bcs;
	}

 3 Controller

	@RequestMapping(value ="/welcome" ,method = RequestMethod.GET)
    public String welcome(Model model,HttpServletRequest request) {
		List<BlogItem> bcs = blogItemService.pageList(-1,true,-1, COUNT_PER_PAGE,true);
        model.addAttribute("blogItems", bcs);
        if(bcs.size() == COUNT_PER_PAGE){
        	BlogItem last = (BlogItem)bcs.get(bcs.size()-1);
        	model.addAttribute("last",last.getPostDate().getTime());
        }
        setup(model);
		return "public/index";
    }

	@RequestMapping(value="/page/{direc}/{offset}",method = RequestMethod.GET)
    public String list(@PathVariable String direc,@PathVariable long offset,Model model,HttpServletRequest request) {
		boolean down = false;
		if(direc.equals("down"))
			down=true;		
		List<BlogItem> bcs = blogItemService.pageList(offset,down,-1, COUNT_PER_PAGE,true);
        model.addAttribute("blogItems", bcs);
        if(bcs.size() == COUNT_PER_PAGE){
        	BlogItem first = (BlogItem)bcs.get(0);        	
        	BlogItem last = (BlogItem)bcs.get(bcs.size()-1);
        	model.addAttribute("first",first.getPostDate().getTime());
        	model.addAttribute("last",last.getPostDate().getTime());
        }else if(bcs.size() > 0){
        	if(down){
            	BlogItem first = (BlogItem)bcs.get(0);        	
            	model.addAttribute("first",first.getPostDate().getTime());        		
        	}else{
        		BlogItem last = (BlogItem)bcs.get(bcs.size()-1);
        		model.addAttribute("last",last.getPostDate().getTime());
        	}
        }else{
        	return "redirect:/welcome";
        }        
        setup(model);
        return "public/index";
    }

 网址:  http://novel-fun.appspot.com

0
0
分享到:
评论

相关推荐

    ndbpager:Google Appengine NDB的传呼机

    【标题】"ndbpager: Google App Engine NDB的分页工具" 【描述】"Google App Engine NDB的分页功能,通常被称为“寻呼机”,是为了帮助开发者处理大量数据查询而设计的。NDB(Non-relational Datastore Binding)是...

    通讯录app的源代码

    例如,使用DiffUtil来减少RecyclerView的更新次数,或者使用Paging库来实现分页加载,减少一次性加载大量数据带来的性能问题。 10. **测试**:在开发过程中,单元测试和集成测试是必不可少的。JUnit和Espresso可以...

    ASP.NET 控件的使用

    16.2.1 使用不同的参数类型 509 16.2.2 作为参数传递对象 511 16.3 使用ObjectDataSource控件分页、排序和过滤数据 515 16.3.1 用户界面分页 515 16.3.2 数据源分页 517 16.3.3 用户界面排序 522 16.3.4 数据源排序 ...

    Android Studio项目源码---查看新闻app

    为了存储和展示新闻,开发者可能定义了对应的实体类,如`NewsItem`,包含标题、摘要、作者、发布时间等字段。 **5. UI设计** UI设计通常通过XML布局文件完成,可能使用了LinearLayout、RelativeLayout或...

    Zoomla!逐浪CMS2 x3.9.6.zip

    12、新增:后台-模型-字段可以选择类型,更改字段类型后,注意出现内容不符出现的灾难。 13、扩展:SVG工具,增加webp转jpg功能 14、处理:重写智写模块 15、增加:手机端专用编辑器,已用于贴吧(支持文字|表情|图片...

    前端项目-ng-bootstrap.zip

    - **分页(Pagination)**: 实现Bootstrap风格的分页组件,支持动态加载数据。 - **进度条(Progress Bars)**: 显示进度或负载状态的水平条。 - **表单组件(Forms)**: 包括输入框、选择器、复选框和单选按钮等,...

    django 实战之(eLeave Form)

    1. **使用第三方库**:项目中探讨了可能使用到的第三方库,如 Django-tracking-app,用于记录用户对模型的 CRUD 访问。 2. **实操技巧**:包括如何为外键字段设置显示字段、处理多语言环境的翻译、实现模糊搜索和...

    andorid 源码北京公交线路查询(离线)

    10. 应用发布:完成开发后,应用需要打包成APK文件,进行签名和优化,然后上传至Google Play Store或其他分发平台,供用户下载使用。 通过掌握以上技术要点,开发者可以构建出一款功能完善的离线北京公交线路查询...

    ng-admin资源

    3. **表单编辑**:提供自动生成的表单用于数据的增删改,支持多种字段类型,如文本、日期、选择器等。 4. **多级嵌套关系**:ng-admin 支持处理多对一、一对多、多对多的关系,可以显示和编辑关联数据。 5. **自定义...

    abwesendFlutter:Flutter App在比赛期间显示缺勤情况

    首先,Flutter是Google推出的一个开源跨平台移动应用开发框架,它使用Dart语言编写,允许开发者构建高性能、高保真度的原生iOS和Android应用。Dart是一种强类型、面向对象的语言,语法简洁,易于学习,特别适合快速...

    Laravel开发-calendar

    在实际开发过程中,你可能还需要考虑一些高级特性,如分页、过滤、时间区处理以及与第三方服务(如 Google Calendar)的集成。这些都可以通过扩展库的功能或者自定义逻辑来实现。 总的来说,Laravel 4 提供了构建...

    Android代码-支持多种查词模式的安卓英语词典

    - **语音识别**:集成Google Speech-to-Text API,允许用户通过语音查词,涉及Android的音频录制和云端API交互。 - **选词查询**:利用Android的选中文字复制功能,用户可以选取屏幕上的单词直接查询,需实现...

    Angularjs CURD 详解及实例代码

    AngularJS 是一款强大的前端JavaScript框架,由Google维护,主要用于构建单页应用(SPA,Single Page Applications)。在AngularJS中,CURD(Create, Read, Update, Delete)操作是开发任何数据驱动应用程序的基础,...

    city_explorer_api

    4. **分页与排序**:为了提供更好的用户体验,API应支持结果的分页显示和按特定字段(如距离、评分)排序。 5. **错误处理**:当请求无效或服务器出现问题时,API需要返回适当的错误信息,以便前端应用能够正确地...

    YouDianCMS

    友点企业网站管理系统集电脑站、手机站、微信、APP、小程序于一体,共用空间,数据同步,是国内五站合一优秀解决方案。系统采用PHP开发,具有操作简单、功能强大、稳定性好、易扩展、安全性强、维护方便等特点,可帮...

    蚂蚁分类信息系统

    蚂蚁分类信息系统是分类信息源码里值得推荐的一款,源码包含四色模板(蓝、绿、橙、红)、3种风格(分类、门户、行业),并含有WAP端,推荐做本地分类信息类站点使用。MayiCMS功能简介:1,整合在线支付接口如支付宝...

    pg-ionic

    6. **部署与发布**:最后,开发者需要将应用打包并发布到App Store和Google Play。这涉及配置Cordova或Capacitor,以及遵循各个平台的发布指南。 在实际开发过程中,"pg-ionic"项目可能还包含了错误处理、日志记录...

Global site tag (gtag.js) - Google Analytics