`
我想我是海
  • 浏览: 214392 次
社区版块
存档分类
最新评论

Jmesa系列(三)开始使用JMesa

阅读更多
相关文章:
 jmesa系列之一:什么是Jmesa 
 jmesa系列(二)Jmesa源码的包结构解读

这次目标很简单:实现服务器端分页列表功能。暂时不包括过滤、排序及Ajax。
诸如过滤、排序及Ajax功能会在过程中逐一加上去。
下面以一个简单的商品列表来说明JMesa的使用方法。

从JSP的代码可以看出.开发者不需要在页面上使用任何的JSP Tag来显示表格,只需要简单把products变量Print出来即可.而显示的逻辑基本上是放到Controller了.肯定有同学有疑问,这样的使 用方法远远不及使用JSP Tag方便啊!为什么要这样做?

这里的显示仅仅是做一个API的使用Demo,为了说明我们可以直接使用Jmesa的API,构造出只要你能想得到的形式的表格展现,而不限制于JSP Tag.你想封装成跟EC一样的Jsp Tag是很容易的事.那就是说,ExtreamTable只可以是JSP Tag.而Jmesa是可以提供Jsp Tag还有Jsp Tag以外的东西.在架构上,作者从EC到Jmesa的转变就是值得肯定的.对了,作者在Jmesa中引进了Groovy,目的我想就是可以让开发人员动态地决定表格的显示啦.效果跟JSP Tag一样,并且更方便.

说说我目前在做的一个报表数据显示应用,同一个页面,可以显示不同构的数据列表,支持过滤,排序等.如果使用JSP Tag是很难达到动态显示数据列的目的,而用Jmesa的API转而易举..

本文的目的是让大家对Jmesa有个感性的认识.而他的各个元素,如Limit,CoreContext这些,将会在接下来的时间详细说明.


代码:Java代码仅有一实体类,一个Service,及一个Controller
Product.java
java 代码
 
  1. public class Product {  
  2.     private static int index = 1;  
  3.     private int id;  
  4.     private String name;  
  5.     private int price;  
  6.     private Date createdTime;  
  7.     private String description;  
  8.   
  9.     public Product(String name, int price) {  
  10.         this.id = index ++;  
  11.         this.name = name;  
  12.         this.price = price;  
  13.         this.createdTime = new Date();  
  14.         this.description = name;  
  15.     }  
  16.     //省略Getter setter  
  17. }  
ProductService.java
java 代码
  1. public class ProductService {  
  2.     private static List <product> products;  </product>
  3.   
  4.     static {  
  5.         products = new ArrayList <product>();  </product>
  6.         products.add(new Product("java"10));  
  7.         products.add(new Product("ruby program"50));  
  8.         products.add(new Product("c++ start"30));  
  9.         products.add(new Product("python cookbook"40));  
  10.         products.add(new Product("java in a nut shell"10));  
  11.         products.add(new Product(".net framework"20));  
  12.         products.add(new Product("are you ok?"21));  
  13.         products.add(new Product("are your light on?"10));  
  14.         products.add(new Product("go to hell"14));  
  15.         products.add(new Product("my name is red"16));  
  16.         products.add(new Product("perl cookbook"15));  
  17.         products.add(new Product("groovy in action"20));  
  18.         products.add(new Product("ruby on rails"100));  
  19.     }  
  20.       //分页显示商品
  21.     public List findProduct(int pageNum, int pageSize) {  
  22.         int start = (pageNum - 1) * pageSize;  
  23.         int end = start + pageSize;  
  24.         int count = 0;  
  25.         List <product> ret = new ArrayList <product>();  </product> </product>
  26.        
  27.         for (int i = 0; i < products.size(); i++) {  
  28.             if (i < start)  
  29.                 continue;  
  30.             if (i >= end)  
  31.                 break;  
  32.             ret.add(products.get(i));  
  33.         }  
  34.         return ret;  
  35.     }  
  36.     //获得商品总数
  37.     public int getCountOfProduct() {  
  38.         return products.size();  
  39.     }  
  40. }  
Demo避免使用数据库,在内存中初始化一些实体及实现分页查询功能。
ListProductController .java
java 代码
 
  1. ProductController.java  
  2. public class ListProductController extends AbstractController {  
  3.     private ProductService productService;  
  4.     private int maxRows;  
  5.   
  6.     public void setProductService(ProductService productService) {  
  7.         this.productService = productService;  
  8.     }  
  9.   
  10.     public void setMaxRows(int maxRows) {  
  11.         this.maxRows = maxRows;  
  12.     }  
  13.   
  14.     protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {  
  15.         //step1 创建limit( 包括查询条件,排序,分页信息等)
  16.         WebContext webContext = new HttpServletRequestWebContext(request);  
  17.   
  18.         LimitFactory limitFactory = new LimitFactoryImpl("product", webContext);  
  19.         Limit limit = limitFactory.createLimit();  
  20.   
  21.         int totalRows = productService.getCountOfProduct();  
  22.   
  23.         //classic export style program  
  24.         if (limit.isExportable()) {  
  25.             RowSelect rowSelect = new RowSelectImpl(1, totalRows, totalRows);  
  26.             limit.setRowSelect(rowSelect);  
  27.         } else {  
  28.             RowSelect rowSelect = limitFactory.createRowSelect(maxRows, totalRows);  
  29.             limit.setRowSelect(rowSelect);  
  30.         }  
  31.   
  32.         List items = productService.findProduct(limit.getRowSelect().getPage(), limit.getRowSelect().getMaxRows());  
  33.   
  34.         //step2  创建 CoreContext  
  35.         CoreContextFactory factory = new CoreContextFactoryImpl(webContext);  
  36.         CoreContext coreContext = factory.createCoreContext(items, limit);  
  37.   
  38.         //step3 创建 table  
  39.         HtmlTableFactory tableFactory = new HtmlTableFactory(webContext, coreContext);  
  40.   
  41.         HtmlTable table = tableFactory.createTable("id""name""price""createdTime");  
  42.         table.setCaption("products");  
  43.         table.getTableRenderer().setWidth("600px;");  
  44.   
  45.         ToolbarFactory toolbarFactory = new ToolbarFactoryImpl(table, webContext, coreContext);  
  46.         Toolbar toolbar = toolbarFactory.createToolbar();  
  47.         View view = new HtmlView(table, toolbar, coreContext);  
  48.         Object result = view.render();  
  49.   
  50.         request.setAttribute("products",result);  
  51.         return new ModelAndView("list.jsp");  
  52.     }  
  53.   
  54. }  


list.jsp
java 代码
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>  
  2.   
  3.   
  4.       
  5.     <script type=<span class="string">"text/javascript" src="scripts/jmesa.js"></script>  
  6.     
  7.     <script type=<span class="string">"text/javascript">  
  8.         function onInvokeAction(id) {  
  9.             setExportToLimit(id, '');  
  10.             createHiddenInputFieldsForLimitAndSubmit(id);  
  11.         }  
  12.     </script>  
  13.   
  14.   
  15. Product listing

      
  16. <%  
  17.     out.println(request.getAttribute("products"));  
  18. %>  
  19.       
  20.   
  21.   
省略Spring配置文件及Web.xml
分享到:
评论
6 楼 spiritfrog 2008-06-12  
也不算就很长了,
  WebContext webContext = new HttpServletRequestWebContext(request);  
   
         LimitFactory limitFactory = new LimitFactoryImpl("product", webContext);  
         Limit limit = limitFactory.createLimit();  
   
        int totalRows = productService.getCountOfProduct();  
   
         //classic export style program  
         if (limit.isExportable()) {  
             RowSelect rowSelect = new RowSelectImpl(1, totalRows, totalRows);  
             limit.setRowSelect(rowSelect);  
         } else {  
             RowSelect rowSelect = limitFactory.createRowSelect(maxRows, totalRows);  
             limit.setRowSelect(rowSelect);  
         }  
   
         List items = productService.findProduct(limit.getRowSelect().getPage(), limit.getRowSelect().getMaxRows();

这就是执行的分页查找,之后的是在画表格, 如果在jsp上写,就可以不要。
5 楼 guoping007 2007-09-21  
jmesa导出一定要在controller写这么冗长的代码么??郁闷
4 楼 sam1982 2007-08-25  
看了一下jmesa的源码,好像有些代码是用着jdk1.5特性的.我们项目都是用1.4的不知道它有没有向下支持的的呢.
3 楼 南宫小骏 2007-08-15  
提个问题
如何将所有的提示信息变为中文?
看了下源文件
似乎没有提供语言属性文件?
2 楼 patriotlml 2007-07-19  
继续写心得啊,等着呢~
1 楼 patriotlml 2007-07-18  
把spring的代码也发嘛,我们好看看怎么获取的数据和回显流程.

3q

相关推荐

    jmesa使用说明文档

    - **org.jmesa.core.preference**:处理 JMESA 的选项,使用 Java 的 `Properties` 类实现用户配置的存储。 2. **org.jmesa.limit**:提供过滤功能,通过 `Limit` 接口控制数据流,可以保存用户查询时的参数,如...

    jmesa.jar jmesa.jar

    jmesa.jar jmesa.jar

    jmesa-tag

    1. **list.jsp**:这通常是一个示例页面,演示了如何在实际应用中使用Jmesa标签来展示数据列表。 2. **css**:这个目录包含CSS样式文件,用于定义表格的外观和布局,使表格更加美观和易于阅读。 3. **WEB-INF**:...

    Jmesa快速指南

    本文将分享在Struts2环境中成功使用Jmesa的经验和心得。 首先,我们需要了解基础环境配置。本例中使用的Struts2版本为2.0.11,Spring为2.5.1,Freemarker为2.3.12,而Jmesa则是2.2.9。开发环境选用的是Eclipse 3.3...

    jmesa的一个例子

    在本示例中,我们将探讨如何使用Jmesa进行数据操作,虽然没有直接提供jar包,但我们可以从其源代码或官方仓库获取。 **Jmesa核心功能** 1. **数据流处理**: Jmesa支持对连续的数据流进行处理,它可以处理来自各种...

    jmesa2.3.4

    例如,使用jmesa读取CSV文件,进行数据清洗,然后应用统计模型进行预测,最后将结果以图表形式展示出来。 五、总结 jmesa2.3.4凭借其全面的功能、良好的兼容性和高效的性能,成为数据科学家和开发者的得力助手。...

    jmesa 入门

    本文将深入探讨JMESa的基本概念、使用方法以及它的优势。 ### 1. JMESa简介 JMESa是基于Java的,设计灵感来源于JSON Path和JMESPath,它扩展了这些语言,使其能够直接应用于SQL查询。这种工具特别适合于那些需要...

    jmesa核心讲解

    1. **SQL查询支持**:JMESA支持标准的SQL语法,允许开发者使用熟悉的SQL语句来查询数据库。这不仅降低了学习成本,也使得数据库操作更为直观。 2. **高性能**:JMESA采用优化的查询执行引擎,能够处理大规模的数据...

    jmesa所需完整jar包

    JMESA,全称Java Medical Image Analysis,是一个用于医学图像分析和处理的开源库。它提供了丰富的功能,包括图像显示、处理...同时,积极参与开源社区,及时获取更新和支持,会让你在使用JMESA的过程中更加得心应手。

    jmesa war source

    【描述】"jmesa-2.3_examples.war-source.zip" 重复三次,暗示这个压缩文件是关于JMESa 2.3版本的示例应用的WAR源码,可能是因为文件名被错误地重复输入了。WAR文件是Web应用程序的归档格式,通常用于Java服务器环境...

    jmesa-3.0.jar

    jmesa表格标签 依赖包 jmesa-3.0.jar

    jmesa-2.4.4.jar

    jmesa-2.4.4.jar 有源码

    jmesa-ajax

    例如,我们可以使用JMESA读取数据库中的数据,然后将其转化为JSON对象,以便于前端解析。 前端接收到服务器响应的JSON数据后,利用JavaScript解析JSON,更新JMESA表格的内容。JMESA提供了一些API,比如`updateTable...

    JMESA SERVLET

    ** JMESA SERVLET ** JMESA(Java Model for Export and...通过这个项目,开发者可以学习到如何使用基本的Servlet技术结合JMESA库实现数据导出,同时了解Web应用程序的基本工作流程,为今后学习更高级的框架打下基础。

    jmesa-snapshot.jar

    jmesa-snapshot.jar jmesa用到的jar

    Jmesa示例[分页,排序,导出CSV,EXCEL,PDF]

    描述中提到的“博文链接:https://liuzidong.iteye.com/blog/789767” 是一篇关于Jmesa使用的详细介绍文章,可能包含了如何实现上述功能的具体步骤和示例代码,由于描述部分为空,我们无法获取更多细节,但可以推测...

    jmesa-3.0.4.jar

    jmesa-3.0.4 最新版 供大家学习下载

    jmesa入门实例源码

    超立方体是JMESA处理多维数据的主要工具,它允许用户处理三维甚至更高维度的数据。通过`HyperCube`类,可以创建和操作具有多个维度的数据集。超立方体的切片、聚合和投影等功能使得数据分析变得更为便捷。 ### 6. ...

    jmesa学习笔记。。。

    在实际项目开发过程中,作者之前使用过其前身ExtremeTable,并在使用过程中遇到了一些bug,最终决定转向JMesa。 #### 二、准备工作 1. **下载最新版本**: 可以从[http://code.google.com/p/jmesa/]...

    jmesa-3.0.4.zip

    3. **调用分页方法**:使用JMESa提供的API进行分页操作,如`Pageable list = jmesa.paginate(startIndex, pageSize);`,其中startIndex和pageSize分别代表起始索引和每页大小。 4. **渲染视图**:在前端界面使用...

Global site tag (gtag.js) - Google Analytics