`

Web - EcSide 开发

阅读更多
ecside介绍:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ecside是一个开源的列表组件。
他源自著名开源列表组件 eXtremeComponents (http://www.extremecomponents.org),
但现在已经脱离eXtremeComponents,独立发展(仍有大量代码来自 eXtremeComponents)。
“做最实用易用的列表组件”是ecside最终的目标。

作者: fins ( name: Wei Zijun    email:fins@163.com   blog:http://fins.iteye.com )

在使用前,请阅读一下以下信息,以帮助您了解您要使用的将是一个多么不成熟的东西(但它会有成熟的一天,而且那天不会远 呵呵):
1 ecside不能和原始版本的 eXtremeComponents 同时使用,且不保证能与原先使用 eXtremeComponents 的系统兼容,请见谅。
2 目前只支持GBK编码的应用,请见谅。
3 目前只在IE6 和FireFox2 上进行过测试,不保证兼容其他(版本)浏览器,请见谅。
4 目前提供的样式风格巨丑无比,请见谅。
5 目前没有完备的文档和例子,请见谅。
6 代码没有注释,没有测试用例,请见谅。
7 没有很好的版本控制,没有构建脚本,请见谅。
8 拥有无数未知的bug,请见谅。

ecside发布地址:
http://fins.iteye.com/blog/40190

ecside圈子:
http://ecside.iteye.com/

ecside综合讨论专用帖
http://fins.iteye.com/blog/48723

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
主要增强的功能:
1 可设置工具条位置(上 下 或 不显示)
2 可设置工具条内容(显示哪些 不显示哪些)
3 可设置工具条上各个功能按钮的相对位置
4 增加了调整页大小的选择框,并可自定义选择框内的内容
5 增加了带有邻近页面的导航条
6 增加了可跳转到指定页面的跳转框
7 增加了当前选中行高亮
8 为ec:table 增加了 excludeParameters 和 includeParameters 属性,可以实现更快捷简便的“参数保留/不保留”功能
9 可添加自定义的html代码到工具条内 或其他位置
10 可手动调整列宽
11 增加了“列表内部滚动条”(实现列表头固定,列表体滚动的功能)
12 为ec:row和ec:column 添加更多的html事件支持,现支持:onmouserover onmouserout onclick ondbclick
13 为ec:table ec:row ec:column增加了自定义扩展属性功能
14 增加 ec:extendrow 标签,实现列表扩展行的功能
15 增加shadowRow(影子行)功能:每行下面可以再加一个子行 这个行里显示什么可以由大家自己定义
16 增加页面变量 ${TOTALROWCOUNT} 用来标示当前纪录在全部记录中的行数
17 增加了打印功能(尚不完善)
18 ec:column属性增加 ellipsis ,实现单元格内数据过长的时候 自动截短并加"..."的功能(ie only)
19 实现了跨列的列表头
20 统计栏的标题格可跨列
21 增加了若干种cell 和 headerCell,例如checkbox radio
22 取消了imagePath属性,样式相关的图片信息全部提入css内
23 重(第4声)用了js 和css ,很多功能用js来实现
24 支持了ajax翻页
25 支持预查询功能,在察看第n页的时候,把n+1页的数据也查询出来(隐藏着)备用,加快查看下一页的速度
26 将导出excel所使用的组件由poi切换成了 jxl
27 xls导出方式修改 原始的导出是导出的vo/map里的原始数值 现在是导出页面实际显示的内容
28 增加简捷导出方式 (通过ec:table的 xlsFileName pdfFileName csvFileName属性)
29 支持pdf中文导出。
30 代码进行了大规模的重构
31 增加了很多ajax相关特性
32 实现了可编辑列表功能 以及cell的映射功能

... ...

上文中对EcSide组件的介绍是我转载自作者其中一篇博文中的内容, 去年开发J2EE项目中需要一个Grid组件, 它能够支持分页, 排序, 过滤, 同时能够导出成Excel, PDF文档, 而这个EcSide组件正好是满足自己所需的一个最合适的组件. 现在这个组件作者已经更名成GT-Grid了,  功能各方面也作了一些调整, 大家可以访问作者fins的博客以获取更多最新消息. 其相关一些资料, 可以访问http://ecside.group.iteye.com/group/share, 有各版本的EcSide组件, 以及相关使用文档与demo程序供下载. 下面我简单介绍这个组件在JSP开发中的使用情况. 去下载作者提供的ECSide文档.rar, 结合来进行学习会比较方便不少, 可以依次看看ECSide入门, ECSide标签属性说明, ECSide基于数据库的分页、排序、过滤, ECSide_FAQ等文章.

ECSide是有一个基于jsp tag的开源列表组件.
简单的说,它就是一组可以帮助你快速实现强大的列表的jsp标签.
它的工作原理很简单.
您将要展现的列表的数据集合(Collection),放入request/pagecontext/session内(使用setAttribute方法.这个工作可以在action/servlet里完成,也可以在jsp页面内完成),然后页面跳转到使用ECSide标签的jsp页面,此时ECSide就可以帮助您展现出所需要的列表.

一个简单的流程通常是这样的.

1 客户端请求action/servlet(如 http://10.195.129.101/test/userlist.do)
2 action接受到请求后,调用相应的BO/dao,执行取列表数据的方法.
3 取得数据后(通常是一个vo/map的list),将数据放入request内(使用requset.setAttribute(key,value)方法.)
4 将请求forward到使用ECSide标签的jsp页面.
5 ECSide将展现出列表.

下面我将自己使用ecside_2.0_RC1步骤简单介绍一下

首先, 需要去下载准备好ecside_2.0_RC1.rar, 如果需要支持导出PDF, 还要需要一些额外的jar包, 下载dependencies_common.zip, dependencies_font.rar, dependencies_pdf.zip, 把解压出来得到的这些jar文件如ecside_2.0_RC1.jar, 都放到项目的WebRoot\WEB-INF\lib文件夹下, ecside.tld文件放到WEB-INF文件夹下, 然后在web.xml中添加组件导出功能所需的一个filter名称ecsideExport, 在JSP页面头部引入控件所需的js, css文件.

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

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<link rel="stylesheet" type="text/css" href="Admin/ecside/css/ecside_style.css">
<script type="text/javascript" src="Admin/ecside/js/prototype_mini.js"></script>
<script type="text/javascript" src="Admin/ecside/js/ecside_msg_utf8_cn.js"></script>
<script type="text/javascript" src="Admin/ecside/js/ecside.js"></script>

其次, 构建所需的ec:table, 比如一个日志查询模块的表格如下, 至于每一个EcSide组件tag属性意思可以查看帮助使用文档

<center>
<br style="line-height:8px;" />
<ec:table items="all" var="record"
retrieveRowsCallback="limit"
rowsDisplayed="20" showPrint="true" showTitle="true"
sortRowsCallback="limit" filterRowsCallback="limit"
action="LogServlet?status=selectall" useAjax="true"
pageSizeList="10,20,30,50,100" title="系统日志" showTitle="false"
xlsFileName="系统日志.xls" csvFileName="系统日志.csv" pdfFileName="系统日志.pdf"
sortable="true" filterable="true" resizeColWidth="true">
<ec:row recordKey="${record.id}">
<ec:column width="60" property="id" title="序号" sortable="false" filterable="false" style="text-align:center"></ec:column>
<ec:column width="120" property="clientIP" title="客户端IP地址”></ec:column>
<ec:column width="90" property="userName" title="用户”></ec:column>
<ec:column width="150" property="logTime" title="时间”></ec:column>
<ec:column width="100" property="dvrName" title="设备名称” sortable="false" filterable="false"></ec:column>
<ec:column width="90" property="logTypeName" title="日志类别” ></ec:column>
<ec:column width="130" property="descript" title="事件描述”></ec:column>
<ec:column width="250" property="comment" title="备注” sortable="false" filterable="false" ellipsis="true"></ec:column>
</ec:row>
</ec:table>
</center>

<!-- 编辑和过滤所使用的 通用的文本框模板 -->
<textarea id="ecs_t_date" rows="" cols="" style="display:none">
<input type="text" class="inputtext" value=""
style="width:100%;" name="" />
<input class="calendarImgButton" onclick="ECSideUtil.showCalendar(this) type="button" id="date_button" />
</textarea>

<textarea id="ecs_t_input" rows="" cols="" style="display:none">
<input type="text" class="inputtext" value="" onblur="ECSideUtil.updateEditCell(this)"
style="width:100%;" name="" />
</textarea>

一般我们还会带查询功能, 该组件支持AJAX方式的查询, 使用ECSideUtil.queryECForm, 其中listFormName为组件Name, 默认为ec

<script type="text/javascript">
//====================== 查询 相关 ======================== //
function doQueryOper(queryFormName, listFormName)
{
var queryForm=$(queryFormName);

var queryPara={
"txtLogType" : queryForm["txtLogType"].value,
"userName" : queryForm["txtUserName"].value,
"dt1" : queryForm["dt1"].value,
"dt2" : queryForm["dt2"].value
};
ECSideUtil.queryECForm(listFormName,queryPara,true);
}
</script>

最后, 就是由后台相关的Servlet或Action提供组件所需数据, 供Grid呈现, 在<ec:table>中action指定提供数据的url, 如action="LogServlet?status=selectall",

对于大数据量的项目最好写个存储过程支持对数据的分页显示. 后台大致代码如下, 如在Servlet的doPost方法中处理

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String path="Admin/error.htm";
String status = request.getParameter("status");
if(status != null)
{
if("selectall".equals(status) && DAOFactory.CheckUser(request))
{
List all = null;
int currentPage = 1;
int size = 50;
int allRecords = 0;
LogDAO logdao = DAOFactory.getLogDAOInstance();
Limit limit = RequestUtils.getLimit(request);
Sort sort = limit.getSort();
Map sortValueMap = sort.getSortValueMap();
FilterSet filterSet = limit.getFilterSet();
Map filterPropertyMap = filterSet.getPropertyValueMap();
QueryItem queryCondition = new QueryItem();
queryCondition.setType(request.getParameter("txtLogType"));
queryCondition.setBeginDate(request.getParameter("dt1"));
queryCondition.setEndDate(request.getParameter("dt2"));

try
{
allRecords = logdao.getAllCount(sortValueMap, filterPropertyMap, queryCondition);
int[] rowStartEnd=RequestUtils.getRowStartEnd(request, allRecords, size);
if(size > allRecords)
{
currentPage = 1;
}
else
{
currentPage = limit.getPage();
}
all = logdao.findAll(rowStartEnd[1] - rowStartEnd[0], currentPage, sortValueMap, filterPropertyMap, queryCondition);
}
catch(Exception ex)
{

}
request.setAttribute("all", all);
path="Admin/systemLog.jsp";
}
}

// 根据path路径进行跳转

request.getRequestDispatcher(path).forward(request, response);
}


页面最终呈现效果如下




而一般Grid把数据以list形式呈现, 有时又需要配合图表, 可以结合我上一篇介绍FusionCharts控件使用的博文Web开发系列 - FusionCharts, 来加入图表功能, 以达到更加完美地实现.

分享到:
评论

相关推荐

    Ecside文档

    Ecside,全称为Eclipse Console Side,是一款基于Java开发的开源Web测试框架,主要用于自动化Web应用程序的测试。这款工具的设计理念是将测试脚本编写与执行的过程集成在Eclipse IDE中,提供了一种直观、高效的测试...

    ECSide开发教程使用手册.pdf

    ### ECSide开发教程知识点概述 #### 一、ECSide简介 - **定义与来源**:ECSide是一款用于Web程序开发的开源列表组件。它最初源于著名的开源列表组件eXtremeComponents([官方网站]...

    Web项目所需ecside全部文件

    ECSide是一款基于Java开发的Web项目管理工具,主要用于协助开发者进行Web应用的开发、调试和维护工作。这个压缩包包含的"Web项目所需ecside全部文件"是ECSide的完整组件,使得用户能够在本地环境中顺利运行和使用...

    ECSide文档.pdf

    《ECSide:一个强大的JSP列表组件》 ECSide,全称为Extreme Components Side,是一个开源的JSP列表组件,...通过合理的系统架构和开发环境配置,开发者可以高效地集成和使用ECSide,提升Web应用的用户体验和管理效率。

    ECSide配置实例

    ECSide是一款基于Java开发的开源数据管理框架,主要用于简化Web应用中的数据展现和操作。在本配置实例中,我们将探讨如何将ECSide集成到一个Web应用中,特别是涉及`web.xml`的配置。 首先,为了使用ECSide,你需要...

    ECSide最新文档

    本文档详细介绍了ECSide Web 应用项目的模块组成、系统开发结构和技术栈等内容,并提供了编码示例。该项目利用ECSide组件实现了高效的列表操作和数据管理功能,适合用于Web应用程序的开发。通过本文档的学习,开发者...

    ecside 文 档

    【Ecside技术详解】 Ecside是一款基于JSP标签的...Ecside的灵活性和易用性使其成为开发Web应用列表展示的理想选择,通过熟练掌握Ecside的使用,可以显著提高开发效率,减少代码量,同时保持界面的美观和功能的完整。

    xml-apis-2.0.2.jar ecside 依赖包之一

    XML(eXtensible Markup Language)是用于存储和传输数据的一种标记语言,广泛应用于Web服务、配置文件和数据交换等领域。xml-apis-2.0.2.jar 是一个专门处理XML相关操作的Java库,它是ECIDE(Enterprise Content ...

    分页组件ECSIDE文档

    ECSIDE组件以其丰富的功能和高性能表现,成为了Web开发中不可或缺的一部分。无论是对数据的高效处理,还是对用户界面的优化提升,ECSIDE都能提供有力的支持。通过遵循上述的开发流程和结构规划,开发者可以充分利用...

    Ecside2.0中文教程

    EcSide2.0是一款基于Java开发的Web应用框架,它主要致力于简化Web应用程序的开发流程,提高开发效率。本教程将全面介绍如何使用EcSide2.0进行开发,特别是对于那些不熟悉Java Web或者对MVC(Model-View-Controller)...

    ecside

    `ecside` 是一个基于 Java 的命令行工具,用于快速开发和管理 Web 应用程序。它集成了诸如代码生成、数据库操作、模板引擎等功能,旨在提高开发效率,减少重复工作,使得开发者可以更加专注于业务逻辑的实现。 在...

    ecside源码

    ecSide 是一个基于 Java 的企业级 Web 开发框架,它的设计目标是简化企业级应用的开发流程,提高开发效率。ecSide 提供了一整套 MVC(Model-View-Controller)架构,以及丰富的组件库和强大的数据管理功能,为开发者...

    ecside2.0rc1源码及文档jar包等

    ECSide是一款基于Java开发的Web应用框架,主要用于构建数据驱动的管理界面。在"ecside2.0rc1源码及文档jar包等"这个压缩包中,包含的资源对于开发者来说是极其宝贵的,因为它提供了深入理解ECSide工作原理以及进行...

    ecside2.0最新版本

    综合以上信息,ecside2.0是一个值得研究和使用的Web开发框架,尤其是对于那些希望在2007年的技术环境下提升开发效率和应用性能的Java开发者。升级到最新修正版不仅可以获得最新的功能,还可以确保软件的稳定性和社区...

    ecside.jar

    Java web项目开发需要的 ecside.jar

    根据Ecside ET 源码改变WEB JSP 分页标签

    ECSide是一款强大的开源Java Web开发工具,它提供了丰富的功能,包括对JSP页面的分页处理。本文将深入探讨ECSide中的ET源码如何实现分页,并讲解如何利用其支持的导出Excel和PDF功能,以及如何进行更改、添加和删除...

    ecside+struts2+spring2.5+hibernate3.2

    本资料主要关注的是一个经典的Java Web开发技术栈,即ecSide、Struts2、Spring 2.5和Hibernate 3.2,以及与之配合使用的MySQL数据库。下面将详细阐述这些技术及其相互间的整合。 **ecSide** 是一个基于Spring的轻量...

Global site tag (gtag.js) - Google Analytics