




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.简介 eXtremeTable是目前流行的优秀分页组件之一,和 Displsytag,ValueList相比,即美观又使用。在介绍eXtremeTable之前先了解一下eXtremeComponents,它是一系列的开源的jsp自定义标签库,eXtremeTable是它中的一个功能强大而又容易配置、扩展、自定义的组件。它是以表格的形式来显示数据,具有分页组件应具有的大部分功能,比如:设定每页显示的记录数,排序等,除此之外它还具有过滤,导出,利用数据库的limit功能局部取数据,自定义列样式等等。eXtremeTable它不依赖任何框架和容器。 2.安装和测试 2.1 下载 eXtremeTable的最新版本为1.0.1,可以从它的官方网站下载最新版本,也可以从/projects/extremecomp/下载.下载的压缩包为eXtremeComponents-1.0.1-with-dependencies.zip,解压后的主要目录如下所示: (1)source:存放源文件 (2)lib:存放使用eXtremeTable一些功能所必需的jar包 (3)dist:使用eXtremeTable所必须的jar包和一些样式表,tld文件和js脚本文件。 (4)images:存放用表格显示数据时所用的图片。 (5)test:存放一个测试eXtremeTable的一个jsp文件。 2.2 安装 1首先把必须的extremecomponents-1.0.1.jar放入WEB-INF/lib目录下,然后根据需要把解压包中lib目录下的jar文件拷贝到WEB-INF/lib目录下。尤其是minimum目录下的jar包也必须放入WEB-INF/lib目录下。 2把css文件放到web应用的任意目录。 3把images中的图片放到web应用的任意目录。 4在/source/org/extremecomponents/table/core 目录中找到perties文件,并把它复制到WEB-INF/classes里面(类加载器可以加载的地方)然后根据需要进行相应修改,当然也可以不使用该文件,但是使用的时候需要指定,后面的例子中就会说到。 2.3 测试该标签库 按照上面的步骤下载并安装后,我们就可以运行一个eXtremeTable例子。首先新建一个web工程并搭建好环境,然后写一个jsp页面来测试一下,代码如下:(当然我们也可以利用eXtremeTable压缩包中自带的例子test.jsp来测试,同样也可以看到效果) link rel=stylesheet type=text/css href=/styles/extremecomponents.css % List countries = new ArrayList(); for (int i = 1; i 把上面的工程部署到tomcat容器下,然后在浏览器地址栏里面输入:http:/localhost:8080/pagination/index.jsp 浏览器显示的结果如下图所示: 图 2-1 3.eXtremeTable分页的原理 Extremecomponents默认从数据库中查找所有记录,如果结果集较大时,ec会使用Limit对象向Controller传递PageNo,PageSize,OrderBy等分页信息。而服务器端将向ec返回总记录数和当前页的内容。具体实现: (1)从数据库获取数据并保存到Collection中 (2)将Collection保存在session或者request变量中 (3)在页面用TableTag设定什么被显示并且如何进行显示。默认的eXtremeTable在servlet范围(按照page,request, session,applicaton的顺序)寻找具有名称和items属性设置相同的Beans集合。表将遍历所有列,它使用var属性将当前行对应的bean从集合传到page范围,因此你可以从page范围中重新得到这些数据进行操作。 4. eXtremeTable的应用 4.1 分页功能 分页是web应用程序最常见的功能,也是一个web开发者必须掌握的技能之一,在目前的IT开发节奏下不需要自己从头写分页功能,而是应该集成一个功能完善的分页组件。下面我们通过一个例子来看一下如何使用eXtremeTable的分页功能。 1. 首先构建一个web应用程序pagination,目录结构如下: (1).domain目录下存放的是employee.java,该程序是一个域对象与数据库中表employee相对应。 (2).dao目录下存放的是EmployeeDao.java,该程序是一个接口负责定义操作数据库的CRUD方法。 (3).dao.imp目录下存放的是接口EmployeeDao的实现类EmployeeDaoImp,该实现类负责从数据表employee中读取所有的记录。 (4).dao.service目录下存放的是一个Servlet,负责把查询出来的结果集存放到request域中,并控制页面的跳转。 (5)images目录下存放显示页面所要用到的图片 (6)styles目录下存放的是css样式表 2. 把eXtremeComponents-1.0.1-with-dependencies.zip解压包中的dist目录和lib/minimum目录 下的jar包拷贝到该应用程序的WEB-INF/lib目录下,把images目录下的图片拷贝到该应 用程序下的images文件夹下面,把dist目录下的css样式表拷贝到该应用程序的styles目 录下面。 3. 通过以上两步使用eXtremeComponents的环境基本上已经搭建好了,接下来就是具体的编 码,为了减少篇幅,简单的代码就不给列出来了,相信大家都会写。 (1)模型组件employee代码如下: 例程4-1 employee.java package .domain; public class employee private int emp_no; private String emp_name; private String emp_sex; private int dep_no; private String phone; public int getDep_no() return dep_no; public void setDep_no(int dep_no) this.dep_no = dep_no; public String getEmp_name() return emp_name; public void setEmp_name(String emp_name) this.emp_name = emp_name; public int getEmp_no() return emp_no; public void setEmp_no(int emp_no) this.emp_no = emp_no; public String getEmp_sex() return emp_sex; public void setEmp_sex(String emp_sex) this.emp_sex = emp_sex; public String getPhone() return phone; public void setPhone(String phone) this.phone = phone; (2)context.xml,该文件负责创建数据源,存放到META-INF目录下,代码如下: 例程4-2 context.xml (3)EmployeeDaoImp.java,代码如下: 例程4-3 EmployeeDaoImp.java package .dao.imp; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import .dao.EmployeeDao; import .domain.employee; public class EmployeeDaoImp implements EmployeeDao public List getemployees() Context initCtx = null; List list = new ArrayList(); try /初始化一个InitialContext对象 initCtx = new InitialContext(); /利用JNDI的名称得到数据源对象 DataSource ds = (DataSource) initCtx .lookup(java:comp/env/jdbc/pagertest); /* JdbcTemplate是Spring中的一个类,是对JDBC的一种封装,抽象出我们常用的方法。 */ JdbcTemplate jdbctemplate = new JdbcTemplate(ds); list = jdbctemplate.query(select * from employee, new RowMapper() /*ResultSet rs结果集,rnum当前行号*/ public Object mapRow(ResultSet rs, int rnum) throws SQLException /-判断结果集的游标是否指向第一行之前 if (rnum 0) return null; employee employee = new employee(); employee.setDep_no(rs.getInt(1); employee.setEmp_name(rs.getString(2); employee.setEmp_sex(rs.getString(3); employee.setEmp_no(rs.getInt(4); employee.setPhone(rs.getString(5); return employee; ); catch (Exception e) / TODO Auto-generated catch block e.printStackTrace(); & nbsp; return list; (4)EmployeeServlet.java 代码如下: 例程4-4 EmployeeServlet.java package .service; import .dao.imp.EmployeeDaoImp; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class EmployeeServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException EmployeeDaoImp edao = new EmployeeDaoImp(); List employees = edao.getemployees(); / 把获得的list集合存放到request域中 request.setAttribute(employees, employees); / 请求转发到test.jsp页面 request.getRequestDispatcher(/test.jsp).forward(request,response); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doGet(request,response); (5)test.jsp,利用eXtremeComponents的标签库把查询出来的结果集以表格的形式显示出来 例程4-5 test.jsp link rel=stylesheet type=text/css href=/styles/extremecomponents.css $employee.emp_no 说明: (1)上面代码中的extremecomponents.css如果不引入仍然可以显示分页的效果,但是不会出现奇偶换行和高亮的效果。 (2)显示表格,其中的items属性用来设值存放在request域中的集合对象的名称。var属性:eXtremeTable使用var属性将当前行对应的bean从集合传到page范围,因此你可以从page范围中重新得到这些数据进行操作。tableId用来唯一标识表,如果在JSP页面里包含两个或两个以上的表时需要设置它,该例子没有用到。action被用来告诉eXtremeTable当过滤或排序时如何回到当前的页面,本例中是通过EmployeeServlet来获得所有记录的集合。imagePath属性是用来显示图片的,以上这几个属性都是必须的。rowsDisplayed是用来设置每一页显示的记录条数,如果不指定的话会使用默认的。width和title属性分别用来指定表格的宽度和标题,是可选的。另外还有一个属性tableId用来唯一标识表,如果在JSP页面里包含两个或两个以上的表时需要设置它。 (3)表示一行,其中highlightRow表示是否显示高亮,如果属性值为true表示显示,否则不显示。表示列,property属性值对应前面定义的域对象employee中的属性,alials为列起一个别名。 4. 把整个pagination工程发部到tomcat的webapps下面,启动tomcat后在浏览器的地址栏中输入:http: /localhost:8080/pagination/servlet/EmployeeServlet,将会看到如下所示的显示效果: 图 4-1 点击上面的next图标,在浏览器中将会看到如下结果: 图 4-2 同样点击Last图标将会看到最后几条记录。 5. 从上面运行的结果可知每一页显示的是5条记录,你也可以从右上角的下拉列表框中选择其它的记录条数,假如你选择的是10将会看到如下的结果: 图 4-3 如果你想要修改下拉列表框中的值,只需在src的根目录下添加一个属性文件perties(名字可以是任意的)并设置相应的属性,代码如下: table.rowsDisplayed=8 table.medianRowsDisplayed=10 table.maxRowsDisplayed=12 然后在web.xml中指定,代码如下: extremecomponentsPreferencesLocation /perties 当然也可以直接在perties中修改,但是仍需在web.xml中指定。 【注】如果在属性文件和jsp页面同时设置了rowsDisplayed属性,会以jsp页面的为主。 注意:一定要合理的使用alias ,title和property属性,如果使用不当就会影响页面的显示效果,一般会遇到下列情况: (1)如果是通过来显示从数据库中查询出一列的值则 emp_name 必须是表映射的实体中定义的属性,如果采用如$employee. emp_name 这种形式时,property属性的值可以任意指定。当然也可以用alias取别名代替但不可以仅仅用title来代替。如果使用$employee. emp_name 就会抛出java.lang.NullPointerException。 (2)如果是使用则不能显示该列的数据,也就是说如果不使用EL表达式的形式来显示数据,那么就必须使用property属性且属性值必需是表映射的实体中定义的属性。 (3)如果三者同时使用优先级为titlealiasproperty,也就是说如果同时使用时以title设置的属性值为准,其次是alias,然后是property. 属性名相同时要制定alias。 4.2 排序功能 eXtremeTable除了具有分页功能之外还内嵌了过滤和排序功能,你只需要决定是否使用他们。接下来我们就利用上面的例子来看一下它的排序功能。 1. 默认情况下所有列的sortable 的属性值都为true,我们只需把前面例子中的test.jsp中的alias属性去掉,这时在浏览器地址栏中访问可以看到和上面一样的效果,然后点击任意列的名称可以看到一个三角符号,三角朝上表示是升序,朝下则表示是降序,例如点击部门编号这一列便可看到如下的结果: 图 4-4 但是注意:在排序时会遇到下列问题 (1)如果使用$employee. emp_name 时点击该列进行排序时就会在浏览器的状态栏下面出现一个警告的图标,从而导致不能正确的实现排序功能。 这时只需把alias的值改为”emp_name”(对应实体的属性)便可。 (2)使用$ employee. emp_name 和使用$ employee. emp_name 同(1)一样,需把property的属性值设置为emp_name便可。这说明如果想使用eXtremeTable 的排序功能就必须设置property的属性值为对应的属性名,这也是前面为何要去掉alias的原因之一,查看源代码就会发现eXtremeTable 的排序是和property属性相关联的,另外eXtremeTable对中文不是很好的支持(这也是eXtremeTable的缺陷之一),如果把前面的alias的属性值改为英文则可以看到正常的效果。 2. 如果不想使用排序功能只需把标签中的sortable的属性值设置为false便可;如果仅仅想指定某一列不用排序,那么只需在中把sortable的属性值设置为false便可。 4.3 过滤功能 eXtremeTable的过滤功能就相当与一个条件查询,只显示满足条件的,过滤掉不满足条件的。默认情况下所有列均可过滤。 1. 使用过滤功能 紧接上面的例子。例如在test.jsp的页面中的Dep_no列上面的文本框中输入一个编号,然后点击右上角的filter,可以看到如下的结果: 图 4-6 你会发现并不是我们预期的结果,我们原本只是想显示部门号为1的员工的信息。可见eXtremeTable在实现过滤时,类似SQL语言中的模糊查询。我认为这个过滤没有太大的意义。感兴趣的话可以自己查看源代码去扩展它的过滤功能使之更清晰,更人性化一点。点击clear图标就可清除过滤条件并显示 最初的结果。 2. 不使用过滤功能 如果你不想使用eXtremeTable的过滤功能,只需在tabel标签中加入filterable=false 便可。例如在中设置filterable=false则该列上面的文本框就会被隐藏,即不能输入过滤条件进行过滤。 4.4 导出功能 eXtremeTable默认支持xls,pdf,csv格式的文件,也可自定义导出格式。如果想使用eXtremeTable的导出功能导出excel文件,在前面例子的基础上还需要以下几步的操作: (1)首先把压缩包中lib/xls目录下的jar包放入WEB-INF/lib目录下 (2)在web.xml中注册一个过滤器,代码如下: eXtremeExport org.extremecomponents.table.filter.ExportFilter eXtremeExport /* (3)在test.jsp中加入下面一行代码如下: (4)在浏览器的地址栏中重新访问http:/localhost:8080/pagination/servlet/EmployeeServlet,可以看到如下结果: 图 4-8 页面上多了一个Expert XLS图标,点击右上角的导出图标可以弹出如下所示的窗口: 然后点击保存按钮便可以把所有记录导入到employees.xls文件中。同样如果想导出pdf格式 的文件只需使用便可。 注意:前面已经提到过alias,title和property三者之间的关系,如果使用不当导出的文件内容也会出现问题。例如如果使用$employee. emp_name 或者$ employee.emp_name 导出的excel文件内容如下: 可以看到员工姓名这一列没有内容,查看源代码就会发现只需改为便可。 4.5 允许和不允许视图 默认情况下只要在标签中指定了正确的属性该列就会导出到指定的视图中。但是在实际的应用中可能只需导出其中的某些列,这时就需要设置viewsDenied或viewsAllowed的属性值来制定类允许和不允许使用的视图(html、pdf、xls、csv,以及任何定制的视图)。当然也可以通过控制后台程序来实现。 (1)不允许视图 例如: 导出的excel文件中没有必要含有性别这一列的内容,也即不允许excel导出时,只需设置viewsDenied便可。如下: 同样对于其它格式的文件(html、pdf、xls、csv,等)也是类似的操作,如果指定多个视图则该列不能应用于指定的视图。 (2)允许视图 指定列允许使用的视图只需设置属性viewsAllowed便可。viewsAllowed与viewsDenied正好相反,但是可以得到同样的效果。 5. eXtremeTable的扩展 5.1扩展属性 大多数标签包含一系列的固定属性,这样那些已经实现的功能能够被使用。然而,eXtremeTable具有一种更具弹性的架构,可以添加自己的标签属性实现更多的定制工作。此外,eXtremeTable提供了非常清晰的钩子(hooks)允许你得到那些定制的标签属性来做一些你需要的工作。 1扩展TableTag 扩展TableTag,只需覆盖addExtendedAttributes()方法,然后添加自己的属性到表对象中。 一个定制的TreeTag示例如下: public class TreeTag extends TableTag private String parentAttribute; private String identifier; public void setParentAttribute(String parentAttribute) this.parentAttribute = parentAttribute; public void setIdentifier(String identifier) this.identifier = identifier; public void addExtendedAttributes(Table table) table.addAttribute(TableConstants.PARENT_ATTRIBUTE, TagUtils.evaluateExpressionAsString(parentAttribute,parentAttribute, this,pageContext); table.addAttribute(Table
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业互联网平台5G模组市场应用适配性趋势研究报告
- 2025年工业互联网平台数据备份与恢复策略与云服务的融合报告
- 2025版市政基础设施土石方开挖施工管理合同范本
- 2025年城市景观策划咨询服务合同
- 2025版智能电网建设运营合作合同模板
- 2025年度教育课程定制合同买卖合同书
- 2025第7章生物质能工程项目合同管理方案
- 2025年度电竞主题咖啡馆经营转让及赛事举办权合作协议
- 2025版煤炭资源探矿权承包开发合同
- 2025年度残障人士就业促进专项用工附加协议书模板
- 急诊科急诊超声检查在腹部外伤中的应用培训
- 速效救心丸培训课件
- 2022年上海市浦东新区6月线下高考二模英语试题(含答案和听力音频与听力稿)
- 妇产科学课件:妊娠合并病毒性肝炎
- 人脸识别系统软件使用手册
- 路基分层-表格-
- 干部年休假审批表
- 竣工验收证书(样本)
- 婴幼儿大便问题全解析
- 小学语文六年级上册第二单元作业设计《七律 长征》《狼牙山五壮士》《开国大典》《灯光》《我的战友邱少云》
- 10kV环网柜质量验收评定表(修改版)
评论
0/150
提交评论