一、前言

  因参与公司框架改造,在负责前端table组件选型时,原本选了jqGrid和Bootstraptable作为备选方案,评审会上,武哥提了EXtremeComponents,让我也去了解下,看下合不合适,在此机缘下,我便按照网络上的教程搭建了演示实例,使用起来也挺简单,功能确实挺强大,当时虽然没有深入研究,但是看过几个扩展现有功能的例子,发现它扩展性挺好,但是因其导出xls依赖的jar包太过老旧,现有系统使用高版本的jar包和ExtremeComponents结合使用时,功能不能正常使用,所以放弃了这个方案。当初在整理这个方案时,看到挺多人说其框架设计的不错,于是便决定通读其源码,以窥其精妙,自我提升一番~这篇我仅仅介绍如何安装ExtremeComponents的及简单的使用~

二、正文

  1. 开发环境介绍

  本文使用的开发环境如下:

jdk1.8
eclipse Mars.2 Release (4.5.2)

  依赖的jar包如下:

  

  因本工程使用maven创建,所以顺带附上pom.xml文件的配置:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.extremeComponents.com</groupId>
<artifactId>ExtremeComponents</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>ExtremeComponents Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.extremecomponents</groupId>
<artifactId>extremecomponents</artifactId>
<version>1.0.1</version>
</dependency> </dependencies>
<build>
<finalName>ExtremeComponents</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.plugin</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
</configuration>
</plugin>
</plugins>
</build>
</project>

  这边特别说明下:ExtremeComponents最新版本就是1.0.1,并且是更新于2006年5月30日,如果不使用Maven的童鞋,可以直接到官网上面去下载对应的压缩包解压(使用Maven,有些静态文件还是需要从压缩包中获取,所以都要下载),传送门:https://sourceforge.net/projects/extremecomp/files/eXtremeComponents/,下载的话,下载eXtremeComponents-1.0.1-with-dependencies.zip,安装使用指南也可以参考这篇博文:http://www.blogjava.net/i369/articles/237808.html

 2. extremeComponents安装

  下面也简要的说下安装extremeComponents(以Maven为例说明,如果非Maven工程,请自己将extremeComponents所需的jar加入build path),像笔者一样配置好pom.xml文件,Maven会自动下载如下包:

  

  这是使用Maven下载的jar,但是需要使用extremeComponents的css及某些js函数,这时候就需要从下载的压缩包:eXtremeComponents-1.0.1-with-dependencies.zip中拷贝到工程里面:

  

  比如我将extremecomponents.css拷贝至webapp/styles,extremecomponents.js拷贝到webapp/js,images文件夹直接复制到webapp下,如下:

  

 3. tld文件的使用

  到目前为止,extremecomponent基础使用环境已经搭建完毕(目前的配置还不能支持导出excel和pdf,如何配置才能支持,请往后看)。eXtremeComponents-1.0.1-with-dependencies.zip压缩包解压后,在dist目录下有个extremecomponents.tld文件,我相信有自定义过jstl标签的人,应该知道这个文件的作用,就是标签的配置文件(不知道的可以自行百度),extremecomponent是开源标签库,那么我们是否有必要将这个拷贝到我们工程目录的WEB-INF目录下呢?处理tld文件有两种方式:

  1)你可以把extremecomponents.tld文件放到WEB-INF目录下的任何地方。 不过,为了便于管理,可以将TLD文件都放到/WEB-INF/tld(自行建立这个目录)目录下,然后你需要根据你的extremecomponents.tld 文件的位置来修改/WEB-INF/web.xml文件的标签映射:

<taglib>
<taglib-uri>/tld/extremecomponents</taglib-uri>
<taglib-location>/WEB-INF/tld/extremecomponents.tld</taglib-location>
</taglib>

在使用的时候:

  <%@ taglib uri="/tld/extremecomponents" prefix="ec" %>

特别说明:有些人在web.xml中添加<taglib />标签的时候报错:

  

这是什么原因呢?这就要看你web.xml中根节点是怎么声明了,如果类似如下形式声明:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:web="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
..................................
</web-app>

那么在声明<taglib />标签的时候应该这样:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:web="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
..................................
<jsp-config>
<taglib>
<taglib-uri>/tld/extremecomponents</taglib-uri>
<taglib-location>/WEB-INF/tld/extremecomponents.tld</taglib-location>
</taglib>
</jsp-config>
..................................
</web-app>

如果web.xml是如下形式的:

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
....................
</web-app>

那么taglib应该按如下方式声明:

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
......................................
<taglib>
<taglib-uri>/tld/extremecomponents</taglib-uri>
<taglib-location>/WEB-INF/tld/extremecomponents.tld</taglib-location>
</taglib>
......................................
</web-app>

  2)如果你的servlet容器支持JSP 1.2 (或更高版本),它将能够自动发现TLD文件,那么你什么也不需要做。 当extremecomponents.jar被容器加载的时候,在它的META-INF目录下的extremecomponents.tld(jar包本身包含这个tld文件,可以将jar解压看到)文件将被找到。 这时,你需要向下面一样在你的JSP里把eXtremeTable包含进来:

<%@ taglib uri="http://www.extremecomponents.org" prefix="ec" %>

  

4. extremecomponent效果展示

  说了半天,extremecomponent的使用效果如何,没有一个直观的感受,那么我先po上一张图:

  

  红色部分就是这个jstl标签最终的显示效果。这个页面的源码如下:

<%@page contentType="text/html;charset=utf-8" %>
<!--如何之前有在web.xml配置了tablib标签,那么这边uri要和那边<taglib-uri />配置的一致-->
<%@taglib uri="http://www.extremecomponents.org" prefix="ec" %> <html> <head>
<title>eXtremeTest</title> <style type="text/css"> .eXtremeTable {
margin: 0;
padding: 0;
} .eXtremeTable select {
font-family: Verdana;
font-size: 9px;
border: solid 1px #EEE;
width: 75px;
} .eXtremeTable .tableRegion {
border: 1px solid silver;
padding: 2px;
font-family:Verdana;
font-size: 10px;
margin-top: 7px;
} .eXtremeTable .filter {
background-color: #efefef;
} .eXtremeTable .filter input {
font-family: Verdana;
font-size: 10px;
width: 100%;
} .eXtremeTable .filter select {
font-family: Verdana;
font-size: 9px;
border: solid 1px #EEE;
width: 100%;
} .eXtremeTable .tableHeader {
background-color: #308dbb;
color: white;
font-family:Verdana;
font-size: 11px;
font-weight: bold;
text-align: left;
padding-right: 3px;
padding-left: 3px;
padding-top: 4;
padding-bottom: 4;
margin: 0;
border-right-style: solid;
border-right-width: 1px;
border-color: white;
} .eXtremeTable .tableHeaderSort {
background-color: #3a95c2;
color: white;
font-family:Verdana;
font-size: 11px;
font-weight: bold;
text-align: left;
padding-right: 3px;
padding-left: 3px;
padding-top: 4;
padding-bottom: 4;
border-right-style: solid;
border-right-width: 1px;
border-color: white;
} .eXtremeTable .odd a, .even a {
color: Black;
font-size: 10px;
} .eXtremeTable .odd td, .eXtremeTable .even td {
padding-top: 2px;
padding-right: 3px;
padding-bottom: 2px;
padding-left: 3px;
vertical-align: middle;
font-family:Verdana;
font-size: 10px;
} .eXtremeTable .odd {
background-color: #FFFFFF;
} .eXtremeTable .even {
background-color: #dfe4e8;
} .eXtremeTable .highlight td {
color: black;
font-size: 10px;
padding-top: 2px;
padding-right: 3px;
padding-bottom: 2px;
padding-left: 3px;
vertical-align: middle;
background-color: #fdecae;
} .eXtremeTable .highlight a, .highlight a {
color: black;
font-size: 10px;
} .eXtremeTable .toolbar {
background-color: #F4F4F4;
font-family:Verdana;
font-size: 9px;
margin-right: 1px;
border-right: 1px solid silver;
border-left: 1px solid silver;
border-top: 1px solid silver;
border-bottom: 1px solid silver;
} .eXtremeTable .toolbar td {
color: #444444;
padding: 0px 3px 0px 3px;
text-align:center;
} .eXtremeTable .separator {
width: 7px;
} .eXtremeTable .statusBar {
background-color: #F4F4F4;
font-family:Verdana;
font-size: 10px;
} .eXtremeTable .filterButtons {
background-color: #efefef;
text-align: right;
} .eXtremeTable .title {
color: #444444;
font-weight: bold;
font-family:Verdana;
font-size: 15px;
vertical-align: middle;
} .eXtremeTable .title span {
margin-left: 7px;
} .eXtremeTable .formButtons {
display: block;
margin-top: 10px;
margin-left: 5px;
} .eXtremeTable .formButton {
cursor: pointer;
font-family:Verdana;
font-size:10px;
font-weight: bold;
background-color: #308dbb;
color: white;
margin-top: 5px;
border: outset 1px #333;
vertical-align: middle;
} .eXtremeTable .tableTotal {
background-color: #FFFFFF;
border-top: solid 1px Silver;
} .eXtremeTable .tableTotalEmpty {
background-color: #FFFFFF;
} </style> </head> <% java.util.List presidents = new java.util.ArrayList(); %> <% java.util.Map president = new java.util.HashMap(); %>
<% president.put("name", "George Washington"); %>
<% president.put("nickname", "Father of His Country"); %>
<% president.put("term", "1789-1797"); %>
<% presidents.add(president); %> <% president = new java.util.HashMap(); %>
<% president.put("name", "John Adams"); %>
<% president.put("nickname", "Atlas of Independence"); %>
<% president.put("term", "1797-1801"); %>
<% presidents.add(president); %> <% president = new java.util.HashMap(); %>
<% president.put("name", "Thomas Jefferson"); %>
<% president.put("nickname", "Man of the People, Sage of Monticello"); %>
<% president.put("term", "1801-09"); %>
<% presidents.add(president); %> <% president = new java.util.HashMap(); %>
<% president.put("name", "James Madison"); %>
<% president.put("nickname", "Father of the Constitution"); %>
<% president.put("term", "1809-17"); %>
<% presidents.add(president); %> <% president = new java.util.HashMap(); %>
<% president.put("name", "James Monroe"); %>
<% president.put("nickname", "The Last Cocked Hat, Era-of-Good-Feelings President"); %>
<% president.put("term", "1817-25"); %>
<% presidents.add(president); %> <% president = new java.util.HashMap(); %>
<% president.put("name", "John Adams"); %>
<% president.put("nickname", "Old Man Eloquent"); %>
<% president.put("term", "1825-29"); %>
<% presidents.add(president); %> <% request.setAttribute("pres", presidents); %> <body style="margin:25px;"> <p style="font-family: Verdana;font-size:14px;">
Congratulations!! You have successfully configured eXtremeTable!
</p> <br> <ec:table items="pres"
action="${pageContext.request.contextPath}/test.jsp"
imagePath="${pageContext.request.contextPath}/images/table/*.gif"
title="Presidents"
width="60%"
rowsDisplayed="5">
<ec:row>
<ec:column property="name"/>
<ec:column property="nickname"/>
<ec:column property="term"/>
</ec:row>
</ec:table> <br> <p style="font-family:Verdana;font-size:12px"> Below is the code that generates the above display. </p> <pre class="bodyText" style="background-color:#eee;padding:2px;width:60%;font-family: Verdana;font-size:11px;">
&lt;ec:table
items="pres"
action="${pageContext.request.contextPath}/test.jsp"
imagePath="${pageContext.request.contextPath}/images/table/*.gif"
title="Presidents"
width="60%"
rowsDisplayed="5"
&gt;
&lt;ec:row&gt;
&lt;ec:column property="name"/&gt;
&lt;ec:column property="nickname"/&gt;
&lt;ec:column property="term"/&gt;
&lt;/ec:row&gt;
&lt;/ec:table&gt;
</pre> <br> <p style="font-family:Verdana;font-size:11px;width:500px">
Note: if you are not seeing any images then be sure to include the images included with the distribution.
This example assumes that the images are in an /images/table/ directory. You can see this by looking at the
imagePath attribute on the eXtremeTable example. If your images are somewhere else then just adjust the
imagePath.
</p> </body>
</html>

5. 文件导出配置

  之前有提过,如果要支持excel导出,以及pdf导出,要如何配置呢?这边以支持excel导出为例进行说明,首先需要在web.xml中配置导出过滤器:

<filter>
<filter-name>eXtremeExport</filter-name>
<filter-class>org.extremecomponents.table.filter.ExportFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>eXtremeExport</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  然后在页面中增加红色部分:

  

  页面呈现效果:

  

  特别说明:在配置<ec:table />标签的时候,有个items属性,eXtremeTable在给定的servlet范围(scope)内取得Beans或Maps的集合用于JSP页面显示。 servlet范围的搜索顺序是:page, request, session和application。

三、参考链接

http://www.blogjava.net/i369/articles/237808.html

https://sourceforge.net/projects/extremecomp/(官网)

四、联系本人

  为方便没有博客园账号的读者交流,特意建立一个企鹅群(纯公益,非利益相关),读者如果有对博文不明之处,欢迎加群交流:261746360,小杜比亚-博客园

ExtremeComponents源码解析(一)的更多相关文章

  1. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  3. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  4. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  5. jQuery2.x源码解析(缓存篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...

  6. Spring IoC源码解析——Bean的创建和初始化

    Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...

  7. jQuery2.x源码解析(构建篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 笔者阅读了园友艾伦 Aaron的系列博客< ...

  8. jQuery2.x源码解析(设计篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 这一篇笔者主要以设计的角度探索jQuery的源代 ...

  9. jQuery2.x源码解析(回调篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 通过艾伦的博客,我们能看出,jQuery的pro ...

随机推荐

  1. vuetify.js框架 下拉框数据改变DOM原数据未清除

    今天遇到一个奇怪的bug 需求很简单,就是将“引擎能力”下拉框选中的值作为筛选条件传入到“样本类型”下拉框中,默认“样本类型”下拉框显示所有样本类型 看图: 如图所示,功能很简单. 其实还是对vuet ...

  2. Java面向对象之抽象方法&接口

    在开始写抽象类之前,有一个问题我觉得想清楚会对理解抽象类很有帮助:那就是为什么要设计抽象类? 难道用类还不够么,为什么要设计出抽象类这样一个东西.我们可以换个角度来理解,就是有些类本来就是不应该被实例 ...

  3. Caliburn.Micro 杰的入门教程1(翻译)

    Caliburn.Micro 杰的入门教程1(原创翻译)Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译)Caliburn.Micro 杰的入门教程 ...

  4. 北京Uber优步司机奖励政策(12月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. 3991: [SDOI2015]寻宝游戏

    3991: [SDOI2015]寻宝游戏 https://www.lydsy.com/JudgeOnline/problem.php?id=3991 分析: 虚树+set. 要求树上许多点之间的路径的 ...

  6. 11、Java并发编程:并发容器之CopyOnWriteArrayList

    Java并发编程:并发容器之CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW ...

  7. 跨平台编译Go程序(交叉编译)

    作用:比如你手头只有Mac系统,而你的用户有Linux和Windows的,他们也想用,你可以通过交叉编译出Linux和Windows上的可执行文件给他们用 (1)首先进入go/src 源码所在目录,执 ...

  8. 使用QUIC

    QUIC是Google新开发的一个基于UDP的协议,它提供了像TCP一样的传输可靠性保证,可以实现数据传输的0-RTT延迟,灵活的设计使我们可以对它的拥塞控制及流量控制做更多的定制,它还提供了传输的安 ...

  9. 你需要掌握的http知识

    作为一名前端er,http是我们必须要掌握的,那么我们到底需要掌握哪些东西呢 一.基础知识 这里我们介绍与http相关的TCP.IP.DNS.url.uri 1.IP IP地址是我们很熟悉的东西,最常 ...

  10. hdu1181变形课(floyd)

    变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submis ...