仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 763|回复: 16
打印 上一主题 下一主题

[学习教程] JAVA网页编程之EasyJWeb Tools营业引擎平分页的计划及...

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:14:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net里有这些工具吗?要简单多少?。web|分页|计划 在Web使用开辟中,不论是有无数据库,常常要用到分页处置成绩。EasyJWeb中经由过程引进IPageList接口来轻松办理我们的碰到的各类分页成绩,包含对数据库纪录分页、文件目次分页、数组大概Java对象分页等。

  EasyJWeb作为一个Web框架,其MVC中心中自己没有包括分页的内容,我们这里所说的分页计划是指在EasyJWebTools营业引擎中关于分页需求使用的计划。

  1、使用示例代码

  起首们看看该分页计划的有关使用示例代码,该示例的完全代码可在http://www.easyjf.com/download.htm中下载!

  示例代码A:com.easyjweb.action.userManageAction.java

  这是EasyJWeb文档中示例3(添编削查)中有关纪录分页显现的部分代码:
publicclassuserManageActionextendsAbstractCrudAction{
  publicIPageListdoQuery(WebFormform,intcurrentPage,intpageSize){
....

DbPageListpList=newDbPageList(User.class,scope,paras);//经由过程挪用DbPageList对象,前往分页了局IPageList
pList.doList(currentPage,pageSize);
returnpList;
}
...

  从代码中我们能够看出,这是一个对数库纪录集对象的分页处置例子。间接通完成了IPageList接口的DbPageList类完成数据库的分页。


  示例代码B:net.meybo.mail.action.EmailAction.java

  这是MeyboMailWeb邮件客户端开源简化版中,中对邮件主题举行分页显现的代码。
  publicclassEmailActionimplementsIWebAction{
...
  privatePagedoList(WebFormform,Modulemodule,ActiveUseruser)
{
  ...
  Listlist=null;
  ...
list=EmailManage.getMailList(user.getUserName(),user.getServerDomain(),boxName);
  IPageListpList=newPageList(newListQuery(list));
if(pList!=null){
pList.doList(pageSize,currentPage,"","");
form.addResult("list",pList.getResult());
form.addResult("pages",newInteger(pList.getPages()));
form.addResult("rows",newInteger(pList.getRowCount()));
form.addResult("page",newInteger(pList.getCurrentPage()));
form.addResult("gotoPageHTML",CommUtil.showPageHtml(pList.getCurrentPage(),pList.getPages()));
}
  ...

  下面例子中是对一个List汇合举行分页,由于MeyboMailWeb中没有效到数据库,以是利用ListQuery查询处置器举行处置。

   

2、EasyJWebTools中营业引擎中有关分页的接口及类

  EasyJWebTools中经由过程利用IPageList及IQuery两个接口对分页成绩举行笼统。
  上面是IPageList接口的全体代码:
  
packagecom.easyjf.web.tools;
importjava.util.Collection;
importjava.util.List;
publicinterfaceIPageList{
publicListgetResult();//取回分页的了局
publicvoidsetQuery(IQueryq);//设置查询处置器
publicintgetPages();//前往总页数
publicintgetRowCount();//前往总纪录数
publicintgetCurrentPage();//前往以后页
publicvoiddoList(intpageSize,intpageNo,StringtotalSQL,StringqueryHQL);//实行分页处置
publicvoiddoList(intpageSize,intpageNo,StringtotalSQL,StringqueryHQL,CollectionparaValues);//实行分页处置
}

  在IPageList中,我们看到经由过程设置查询处置器完成数据的查询及分页,这里我们在看看IQuery接口的内容:

  packagecom.easyjf.web.tools;
  importjava.util.Collection;
  importjava.util.List;
  publicinterfaceIQuery{
  intgetRows(Stringconditing);//失掉总纪录数
  ListgetResult(Stringconditing);//依据前提查询并前往了局
  voidsetFirstResult(intbegin);//设置入手下手纪录
  voidsetMaxResults(intmax);//设置每次查询前往的最年夜纪录
  voidsetParaValues(CollectionparaValues);//设置查询参数值
  ListgetResult(Stringconditing,intbegin,intmax);//从了局会合begin入手下手的地位,取max笔记录
  }

  因而可知,我们的IPageList实际上是经由过程设置挪用分歧的查询处置器完成对分歧范例数据来举行分页处置的。


3、通用分页处置IPageList的完成PageList类
  在EasyJWebTools中,我们的PageList类完成了IPageList接口,其是一个通用的分页处置类,别的各类范例数据的分页能够经由过程承继它来完成。

  PageList.java的全体代码以下:

  packagecom.easyjf.web.tools;

importjava.util.*;
/**
*完成经由过程挪用IQuery完成分页处置
*@author蔡世友
*
*/
publicclassPageListimplementsIPageList{
privateintrowCount;//纪录数
privateintpages;//总页数
privateintcurrentPage;//实践页数
privateListresult;
privateIQueryquery;
publicPageList()
{

}
publicPageList(IQueryq)
{
this.query=q;
}
publicvoidsetQuery(IQueryq)
{
query=q;
}
publicListgetResult()
{
returnresult;
}

publicvoiddoList(intpageSize,intpageNo,StringtotalSQL,StringqueryHQL){
Listrs=null;
inttotal=query.getRows(totalSQL);
if(total>0){
this.rowCount=total;
this.pages=(this.rowCount+pageSize-1)/pageSize;//记算总页数
intintPageNo=(pageNo>this.pages?this.pages:pageNo);
if(intPageNo<1)intPageNo=1;
this.currentPage=intPageNo;
if(pageSize>0){
query.setFirstResult((intPageNo-1)*pageSize);
query.setMaxResults(pageSize);
}
rs=query.getResult(queryHQL);
}
result=rs;
}
publicvoiddoList(intpageSize,intpageNo,StringtotalSQL,StringqueryHQL,CollectionparaValues){
Listrs=null;
query.setParaValues(paraValues);
inttotal=query.getRows(totalSQL);
if(total>0){
this.rowCount=total;
this.pages=(this.rowCount+pageSize-1)/pageSize;//记算总页数
intintPageNo=(pageNo>this.pages?this.pages:pageNo);
if(intPageNo<1)intPageNo=1;
this.currentPage=intPageNo;
if(pageSize>0){
query.setFirstResult((intPageNo-1)*pageSize);
query.setMaxResults(pageSize);
}
rs=query.getResult(queryHQL);
}
result=rs;
}
publicintgetPages(){
returnpages;
}
publicintgetRowCount(){
returnrowCount;
}
publicintgetCurrentPage(){
returncurrentPage;
}
}



4、利用Hibernate会见数据库时的IQuery接话柄现
  这是EasyJF网站背景中,利用Hibernate两头件对数据库会见时分,其对应查询处置器IQuery接口的完成。

  DbQuery.java的全体代码:

packagecom.easyjf.comm;

importjava.util.Collection;
importjava.util.List;

importorg.hibernate.Query;
importorg.hibernate.Session;
importcom.easyjf.web.tools.IQuery;
publicclassDbQueryimplementsIQuery{
privateSessionsession;
privateintbegin;
privateintmax;
privateListparaValues;
publicDbQuery(Sessionsession)
{
this.session=session;
}

publicvoidsetParaValues(CollectionparaValues){
this.paraValues=(List)paraValues;
//System.out.println("参数":paraValues.size();)
}

publicintgetRows(Stringconditing){
Queryquery1=session.createQuery(conditing);
if(paraValues!=null){
for(inti=0;i<paraValues.size();i++)
{
query1.setParameter(i,paraValues.get(i));

}
}
inttotal=((Integer)query1.uniqueResult()).intValue();
returntotal;
}

publicListgetResult(Stringconditing){
Queryquery=session.createQuery(conditing);
if(paraValues!=null){
for(inti=0;i<paraValues.size();i++)
{
query.setParameter(i,paraValues.get(i));
}
}
if(begin>0)query.setFirstResult(begin);
if(max>0)query.setMaxResults(max);
returnquery.list();
}

publicvoidsetFirstResult(intbegin){
this.begin=begin;
}

publicvoidsetMaxResults(intmax){
this.max=max;
}

publicListgetResult(Stringconditing,intbegin,intmax){
Queryquery=session.createQuery(conditing);
if(begin>0)query.setFirstResult(begin);
if(max>0)query.setMaxResults(max);
returnquery.list();
}
publicvoidsetParaValues(ListparaValues){
this.paraValues=paraValues;
}
}

5、关于List列表数据举行分页的查询处置器ListQuery完成

  当我们要分页的方针数据不是数据库纪录,而是别的贮存体例时(如文本、xml大概内存中的及时对象线程等),能够转化为数组或List等。这时候可经由过程利用ListQuery查询处置器完成分页查询。

  ListQuery.java的全体代码:

packagecom.easyjf.web.tools;

importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.List;

publicclassListQueryimplementsIQuery{
privateintbegin=0;
privateintmax=0;
privateListlist=null;
publicListQuery()
{

}
publicListQuery(Listl)
{
if(l!=null){
this.list=l;
this.max=l.size();
}
}
publicvoidinitList(Listl)
{
this.list=l;
this.max=l.size();
}
publicintgetRows(Stringconditing){

return(list==null?0:list.size());
}

publicListgetResult(Stringconditing){
returnlist.subList(begin,begin+max>list.size()?list.size():begin+max);
}
publicvoidsetFirstResult(intbegin){
this.begin=list.size()<begin?list.size():begin;
}
publicvoidsetMaxResults(intmax){
this.max=max;
}
publicListgetResult(Stringconditing,intbegin,intmax){

returnlist;
}
publicvoidsetParaValues(CollectionparaValues){
//TODOAuto-generatedmethodstub
}
}

6、关于分页的算法会商
  因为EasyJWebTools营业引擎是对浩瀚分页需求的复杂笼统。因而,没法对分页查询处置器的算法等作详细的限定,下面给出的两个查询处置器只是一个复杂的使用实例,人人能够依据实践使用项目中的需求举行查询处置器的完成及算法计划。
  
  因为程度无限,该计划上有良多分歧理的中央,恳请人人斧正!


7、EasyJWeb简介

  EasyJWeb是基于java手艺,使用于WEB使用程序疾速开辟的MVC框架,框架计划构想来历于国际浩瀚项目理论,充实借签了以后支流的开源Web框架(Struts、JSF、Tapestry、Webwork等),吸收了其长处及精髓,使用Velocity作为模板页面引擎,是一个完成了页面及代码完整分别的MVC开辟框架,是一个旨在于为中小型Web使用体系供应疾速开辟理论的浅易Web框架。

  EasyJF开源团队于2006岁首才入手下手建立,因而以后全部开辟团队组建和所公布的作品,都显得极不成熟。EasyJWeb仍旧处于测试阶段,请宽大的Java喜好者多多品评及倡议。同进也十分接待您能到场到我们的国产开源步队中。

  EasyJWeb官方网址:www.easyjf.com
EasyJF团队官方网址:www.easyjf.com
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的
若天明 该用户已被删除
沙发
发表于 2015-1-20 18:16:37 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
爱飞 该用户已被删除
板凳
发表于 2015-1-20 19:15:38 来自手机 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
愤怒的大鸟 该用户已被删除
地板
发表于 2015-1-25 08:57:00 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
谁可相欹 该用户已被删除
5#
发表于 2015-1-25 21:49:17 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
金色的骷髅 该用户已被删除
6#
发表于 2015-1-26 17:50:47 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
深爱那片海 该用户已被删除
7#
发表于 2015-2-2 13:06:17 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
不帅 该用户已被删除
8#
发表于 2015-2-2 21:57:57 来自手机 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
活着的死人 该用户已被删除
9#
发表于 2015-2-4 23:09:29 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
变相怪杰 该用户已被删除
10#
发表于 2015-2-5 11:29:46 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
莫相离 该用户已被删除
11#
发表于 2015-2-8 23:50:57 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
小女巫 该用户已被删除
12#
发表于 2015-2-9 22:42:26 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
简单生活 该用户已被删除
13#
发表于 2015-2-11 06:29:11 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
因胸联盟 该用户已被删除
14#
发表于 2015-2-22 00:40:16 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
若相依 该用户已被删除
15#
发表于 2015-2-26 10:05:29 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
山那边是海 该用户已被删除
16#
发表于 2015-3-13 01:07:10 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
精灵巫婆 该用户已被删除
17#
 楼主| 发表于 2015-3-20 07:50:45 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 03:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表