一直以来,都没发现什么好的分页组件,最初时用过displaytag,仔细研究了一下,发现它并没有别人说的那么强大,至少离自己的期望还很远,因此尝试寻找其它新的分页组件,但很久以来都没发现自己满意的。无意中又发现了jmesa,也受到了很多的人的吹捧。于是自己也尝试用一下,不过发现其资料相当的少,就算其官方网站上也没多少资料,把整个2.4.5的ZIP包下载下来后,发现连基本的文档都没有,更让人郁闷的是基本的API文档都没有。看来要看看基本的效果也不是那么简单的事情,唯一的资料就是官方的几个例子,实在搞不明白也只有看源码,说实话,源码的注释很少,有些方法或类是用来做什么的根本就没说,理解起来确实有点难度,说了这么多,也把这一两天的成果写下来,怕自己坚持不了多久,索性写一点算一点。
需要用到的组件有点多,如附件图所示。需要注意的是,web层用了Stripes,个人认为此框架很好,源码也写得很好。2.4.5的ZIP包中,有大多数文件,但是有些也没有,如slf4j与jquery等。
jmesa分页的方式有两种,一种是通过java代码直接控制,第二种是通过标签来控制。
首先介绍一下直接在java代码中控制的方式:
public class PaginationActionBean implements ActionBean {
//此id表示将要创建的table的id
private String id = "user_table";
private ActionBeanContext context;
private String html;
public String getHtml() {
return html;
}
public void setHtml(String html) {
this.html = html;
}
........
@DefaultHandler
public Resolution display() {
TableFacade tableFacade = TableFacadeFactory.createTableFacade(id, this
.getContext().getRequest());
addItems(tableFacade);
html = html(tableFacade);
ForwardResolution resolution = new ForwardResolution("/jsp/page.jsp");
return resolution;
}
private void addItems(TableFacade tableFacade) {
tableFacade.setItems(FillListData.getData());
}
private String html(TableFacade tableFacade) {
tableFacade.setColumnProperties("name", "password", "deleteUser");
HtmlTable table = (HtmlTable) tableFacade.getTable();
table.setCaption("用户列表");
table.getTableRenderer().setWidth("600px");
HtmlRow row = table.getRow();
HtmlColumn name = row.getColumn("name");
name.setTitle("名字");
HtmlColumn password = row.getColumn("password");
password.setTitle("密码");
HtmlColumn delete = row.getColumn("deleteUser");
delete.setTitle("删除");
delete.setWidth("100px");
// Using an anonymous class to implement a custom editor.
// 用于演示在表格中增加超链接
name.getCellRenderer().setCellEditor(new CellEditor() {
public Object getValue(Object item, String property, int rowcount) {
Object value = new BasicCellEditor().getValue(item, property,
rowcount);
HtmlBuilder html = new HtmlBuilder();
html.a().href().quote().append("http://baidu.com").quote()
.close();
html.append(value);
html.aEnd();
return html.toString();
}
});
delete.getCellRenderer().setCellEditor(new CellEditor() {
public Object getValue(Object item, String property, int rowcount) {
HtmlBuilder html = new HtmlBuilder();
// 取得每一行的id号
Object user = ItemUtils.getItemValue(item, "name");
String js = " onclick='javascript:del(\"user\"," + user + ") '";
html.a().append(js).href().quote().append(
getContext().getRequest().getContextPath()
+ "/Pagination.action?delete&user=" + user)
.quote().close();
html.append("删除");
html.aEnd();
return html.toString();
}
});
return tableFacade.render(); // Return the Html.
}
..............
}
上面的代码中最重要的就是那上html方法,此方法完成了整个表格的定制工作,包括链接在内。如果要重新设置每页显示的记录数(默认每页可显示15,50,100),要么修改jmesa.properties文件,要么通过java代码设置。修改配置文件的话,同时要修改两个地方:
limit.rowSelect.maxRows=15
html.toolbar.maxRowsDroplist.increments=15,50,100
如果修改,必须满足第一行的数字必须是第二行所有数字中的一个。用java代码修改的也要遵照同样的原则。
jsp代码很简单:
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/jquery.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/jquery.jmesa.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/js/jmesa.js"></script>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/jmesa.css"></link>
</head>
<body>
<h1>Stripes Calculator</h1>
<form>
${actionBean.html}
<script type="text/javascript">
function onInvokeAction(id) {
createHiddenInputFieldsForLimitAndSubmit(id);
}
</script>
</form>
</body>
上面这段代码中,需要注意一下JS声明的顺序,而且还要申明一个form,不然分页的时候JS会出错。还要加上上面的那段JS代码。
第二种方式是直接通过标签的方式申明,因此需要在JSP头部申明:
<%@ taglib uri="/WEB-INF/tld/jmesa.tld" prefix="jmesa" %>
.........
...............
将${actionBean.html}替换成:
<jmesa:tableFacade id="user_table" items="${items}" var="bean" >
<jmesa:htmlTable width="600px">
<jmesa:htmlRow>
<jmesa:htmlColumn property="name"/>
<jmesa:htmlColumn property="password" title="Last Name"/>
</jmesa:htmlRow>
</jmesa:htmlTable>
</jmesa:tableFacade>
这部分代码的作用与上面action直接操纵表格的方式一样,只是把工作转移到JSP中。只是上面的${items}表示一个将要显示的collection,不用再使用字符串的方式显示。如果两种方式都用的话,则以JSP中的方式为准。
jmesa的配置文件已经集成在JAR中,如果需要改变,可以将此文件复制出来,改变其内容,然后在web.xml重新指定其路径:
<context-param>
<param-name>jmesaPreferencesLocation</param-name>
<param-value>WEB-INF/jmesa.properties</param-value>
</context-param>
- 大小: 27.3 KB
分享到:
相关推荐
通过深入理解和应用Jmesa,开发者能够创建出功能丰富、响应迅速的Web应用,提升用户体验。而提供的压缩包文件则是学习和实践Jmesa的一个基础起点,通过分析和运行其中的示例,可以更好地理解和掌握Jmesa的用法。
《Jmesa在Struts2环境中的应用实践》 Jmesa是一款强大的Java表格和分页处理库,尤其适用于Web应用程序。在Struts2框架下集成Jmesa,可以为用户提供直观、高效的数据显示和操作功能。然而,由于相关文档较少,使得在...
**Jmesa简介** Jmesa,全称为Java Middleware for Extracting and Analyzing Streams,是一个开源的Java...通过学习和实践这个例子,我们可以更好地理解如何利用Jmesa来处理数据,为我们的应用添加实时分析能力。
JMESA 是一个基于 Java 开发的 Html 表格组件,源自 ExtremeTable 项目,主要用于在 Web 应用中展示、过滤、排序和分页数据,并支持数据导出功能。它非常灵活,允许开发者根据具体需求进行定制。JMESA 的运行需要 ...
jmesa2.3.4,作为一款备受推崇的API,其在IT领域中的应用广泛且深受好评。这款工具以其卓越的性能和易用性,为开发者提供了一种高效的数据处理和分析解决方案。本文将详细探讨jmesa2.3.4的核心特性,应用场景以及...
【标题】"jmesa war source" 指的是一个与JMESa相关的WAR源码包,这个包包含了JMESa的2.3版本示例应用的源代码。 【描述】"jmesa-2.3_examples.war-source.zip" 重复三次,暗示这个压缩文件是关于JMESa 2.3版本的...
5. **应用程序集成**:JMESA可以被嵌入到Java应用程序中,提供灵活的数据访问接口。 **学习与进阶:** 对于想要深入了解JMESA的开发者,可以通过官方文档和示例代码来学习。此外,参与开源社区,阅读源码,以及...
JMESa(Java Message Expression Language for SQL Access)是一种用于在Java应用程序中查询和操作数据库的开源工具。它提供了一种简洁、强大的方式来表达SQL查询,使得开发者可以更方便地与数据库进行交互。本文将...
3. 用户界面组件:JMESA包含用于创建用户界面的组件,如图像查看器、滑块控件等,帮助开发者构建可视化应用,方便医生和研究人员交互。 4. 多线程与并发:在处理大量图像数据时,JMESA利用Java的多线程特性,可以...
JMESA(Java Message Event Sink阿A)则是一个用于处理和展示结构化数据的Java库,特别适合在Web应用中展示表格和图表。本文将深入探讨如何将JMESA与AJAX技术结合,以实现动态、高效的数据展示。 首先,我们需要...
本项目是基于JMESA实现的一个简单的Servlet应用,没有依赖其他框架,因此对于初学者来说,更容易理解和学习。 ### 1. JMESA 简介 JMESA的核心功能在于其强大的数据转换能力,能够将Java集合、数据库结果集等数据源...
"Jmesa示例[分页,排序,导出CSV,EXCEL,PDF]" 这个标题提到了几个关键功能点,它们是Jmesa库在实际应用中的常见操作: 1. **分页**:这是在处理大量数据时非常重要的功能,允许用户按指定数量的数据分批次加载和显示...
**JMESA(Java Multidimensional Expression Set API)** 是一个强大的开源库,主要用于处理多维数据,如数组、矩阵和立方体。它为Java开发者提供了处理和分析大量结构化数据的能力,尤其在科学计算、统计分析和大...
总之,`jmesa-3.0_examples.war-source`是一份珍贵的学习材料,对于想要深入了解jmesa及其在实际项目中应用的开发者来说,无疑是不可或缺的参考资料。通过对源码的深度学习和实践,可以进一步提升在数据处理和分析...
JMESa适用于各种需要数据分页的场景,例如Web应用的后台管理系统、数据分析平台、电商平台的商品列表等。通过使用JMESa,开发者可以快速实现高效的数据分页展示,减少服务器负担,提高用户体验。 总的来说,JMESa ...
JMesa是一款强大的表格控件工具,主要用于Web应用程序中实现高效的数据展示与管理。本篇学习笔记主要围绕JMesa的安装配置、基本使用方法以及常见问题解决策略进行详细介绍。在实际项目开发过程中,作者之前使用过其...
最后,`org.jmesa.web`包为Web环境中的Jmesa使用提供便利的类,帮助在Web应用中集成和操作Jmesa的功能。 在`limit`包中,`Limit`接口的实现通常是简单的,但其组合了`RowSelect`、`FilterSet`和`SortSet`等组件,...
《JMESA 2.5.3 Live 源代码解析与应用探索》 JMESA,全称为Java Multiple Exports and Schema Analyzer,是一个强大的Java工具,主要用于处理和分析Java类库中的导出(exports)和模式(schemas)。在开源社区中,...
在描述中提到的"jmesa标签的一个小的实例"可能是指在Struts1应用中使用JMesha的标签库来展示数据。Struts1允许开发者使用标签库来增强其JSP页面的功能,JMesha的标签可以方便地插入到这些页面中,从而创建动态的、...
**JMESa:Java 库的解析与应用** JMESa(Java Message Extraction and Serialization)是一个专门为Java开发者设计的库,用于处理和解析特定格式的数据,尤其是从代码托管平台code.google.com/p/jmesa获取的项目。...