ExtremeComponents源码解析(一)

article/2025/9/20 21:40:33

一、前言

  因参与公司框架改造,在负责前端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 theimagePath 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,小杜比亚-博客园

转载于:https://www.cnblogs.com/xdouby/p/7827289.html


http://chatgpt.dhexx.cn/article/VjbBmIhK.shtml

相关文章

eXtremeComponents的eXtremeTable分页特性

<script type"text/javascript"> </script> <script type"text/javascript" src"http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> eXtremeComponents的eXtremeTable是一套很好的分页标签&#xf…

Android Dialog

创建对话框 Showing a Dialog 显示对话框 Dismissing a Dialog 解除对话框 Using dismiss listeners 使用解除监听器Creating an AlertDialog 创建警告对话框 Adding buttons 增加按钮 Adding a list 增加列表 Adding checkboxes and radio buttons 增加单选框和复选框Creating…

关于DialogResult

在程序中&#xff0c;经常会弹出一个对话框来让用户填写一些信息&#xff0c;填写完成后&#xff0c;当用户点击“确定”按钮后&#xff0c;在主窗体中进行其他的处理。比如一个简单的例子&#xff0c;在主窗体中有一个菜单&#xff0c;是“增加用户”&#xff0c;当点击这个菜…

dialogFragment---dialog

详解一&#xff1a; Android提供alert、prompt、pick-list&#xff0c;单选、多选&#xff0c;progress、time-picker和date-picker对话框&#xff0c;并提供自定义的dialog。在Android 3.0后&#xff0c;dialog基于fragment&#xff0c;并对之前版本提供兼容支持库&#xff0c…

Android Dialog

Android Dialog 创建对话框 一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的小功能. Android API 支持下列类型的对话框对象: 警告对话框 AlertDialog: 一…

Dialogs(对话框)

对话框 对话框是一种提示用户去做出选择或输入其他信息的小窗口。 对话框不填充屏幕并且通常被用于在执行前需要用户做出决定的模态事件。 对话框设计 阅读 Dialogs 设计指南&#xff0c;获取包括语言规范等关于如何设计对话框的更多信息。 虽然 Dialog 类是对话框的基类&#…

【Android Dialog】Dialog

AlertDialog Dialog类是所有弹窗的父类&#xff0c;官方建议我们不要直接实例化它&#xff0c;而是使用其子类来获取实例。AlertDialog是系统提供的一个直接子类&#xff0c;它能帮助我们快速构建出不同类型的弹窗。接下来就看下各种类型弹窗的使用。 1、普通对话框 /*** Al…

DIALOG

[SAP]屏幕Dynpro 原文链接&#xff1a;http://www.cnblogs.com/jiangzhengjun/p/4292250.html 对话屏幕Dynpro(SE51). 11 屏幕元素... 11 屏幕属性... 11 PAI事件的触发、屏幕元素Function Code设置... 12 屏幕流逻辑Screen Flow Logic. 12 对话屏幕中的字段命名大小写问题...…

HTML基础之表单提交

表单提交 在网页上&#xff0c;一般都会有让你输入信息进行校验或者检索的地方&#xff0c;比如搜索栏或者输入账号密码进行登录的地方&#xff0c;当我们输入数据之后&#xff0c;单击确定或者搜索等按键的时候&#xff0c;网页就会把我们输入到输入框中的信息发送到与前端网…

JavaScript之Ajax-axios表单提交

目录 一.表单概念 二.表单提交 三.FormData语法 四.头像上传模板 五.请求体类型 六.图书管理(增删改查) 七.axios语法优化写法 优化1: axios全局配置 优化2: 默认的method 优化3: axios的快捷方法 一.表单概念 form标签&#xff08;表单&#xff09;是用来收集用户…

表单提交后跳转指定链接

表单的作用可以根据场景的变化而变化&#xff0c;可以是问卷调查、故障报修、自助下单等多种业务场景。如需提交后进行下一步操作&#xff0c;如成功提交咨询申请后自动跳转到咨询详情页&#xff0c;可以通过设置提交扩展&#xff0c;实现表单提交后跳转指定链接。 当跳转开启…

jquery form表单提交

使用jquery 进行form表单提交 文章目录 使用jquery 进行form表单提交先上结果&#xff1a;代码html代码 ---index.htmljs代码---index.js代码用到的jquery.js、select2的css和js在我项目里面有 下载地址 我这里使用了多选框&#xff08;传输到后端时&#xff0c;用对象接收&…

表单提交和超链接请求传递参数的几种方式

表单提交和超链接请求传递参数的几种方式 这段时间在使用easy-ui的datagrid&#xff0c;他有自己提交表单的方式&#xff0c;所以就整理整理页面对参数的提交方式&#xff1a; 注&#xff1a;下面代码都已经过测试。 1. HTML提交表单 HTML提交表单简单易操作&#xff0c;依靠…

模拟html post表单提交

一、打开自动提交访问 设置好表单账号密码&#xff0c;然后访问指定地址。就能自动提交登录并跳转到首页 1、填写访问表单信息 设置好表单账号密码 <input name"account" <input id"password" name"password" 然后填上访问地址action …

02 Ajax表单提交

目录 一、表单概念 1.表单 2.提交的两种方式 二、form-serize与FormData 1.form-serize 2.FormData 三、文件上传案例分析 以下的既为本文的核心概括 一、表单概念 1.表单 form标签&#xff08;表单&#xff09;是用来收集用户输入的信息。 表单构成&#xff1a; 表单标签&a…

Form表单提交

Form表单提交 form表单提交&#xff0c;表单提交分两种&#xff1a;自动提交 和 手动提交&#xff0c; form表单提交又分&#xff1a;post提交和get提交&#xff0c;以下用的都是post提交 一.自动提交表单&#xff1a; 自动提交表单&#xff0c;我们可以通过框架引用&#…

html 提交form表单提交数据格式,form表单提交数据

form表单提交的几种方法 HTML表单提交的几种方式方式一:通过submit按钮提交方式二:通过一般按钮button提交1/3javascript">functionsubmit1(){varform1=document.getElementById("form1");form1.action="bjpowernode.html";form1.submit();方式三…

JavaScript表单提交

表单提交在前端编程阶段中也是一个重点。它是由页面数据保存到后台数据库的重要枢纽&#xff0c;通过表单提交的方式将数据上传到数据库进行保存。同时这些数据也包含用户信息、统计信息、日志信息等等。 数据的信息不同&#xff0c;上传的方式也不同。在JavaScript中有四种种表…

表单提交的四种方式

表单提交的四种方式开发工具与关键技术&#xff1a;VS &#xff0c;JavaScript &#xff0c;Ajax 作者&#xff1a;刘任锋 撰写时间&#xff1a;2021年5月7日内容&#xff1a;将from表单里的内容提交到控制器上。 HTML布局 JS&#xff1a;先获取姓名&#xff0c;性别&#xff0…

表单的提交方式

表单有两个较特殊的属性&#xff0c;一个是method&#xff0c;是规定用于发送表单的HTTP方法&#xff08;提交表单的方式&#xff09;&#xff1b;还有一个是action&#xff0c;是规定当提交时向何处发送表单的数据&#xff08;要提交表单的地址&#xff09;。Form表单有一个自…