2007-06-30
Jmesa系列(三)开始使用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
ProductService.java
Demo避免使用数据库,在内存中初始化一些实体及实现分页查询功能。
ListProductController .java
list.jsp
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 代码
- public class Product {
- private static int index = 1;
- private int id;
- private String name;
- private int price;
- private Date createdTime;
- private String description;
- public Product(String name, int price) {
- this.id = index ++;
- this.name = name;
- this.price = price;
- this.createdTime = new Date();
- this.description = name;
- }
- //省略Getter setter
- }
java 代码
- public class ProductService {
- private static List
products; - static {
- products = new ArrayList
(); - products.add(new Product("java", 10));
- products.add(new Product("ruby program", 50));
- products.add(new Product("c++ start", 30));
- products.add(new Product("python cookbook", 40));
- products.add(new Product("java in a nut shell", 10));
- products.add(new Product(".net framework", 20));
- products.add(new Product("are you ok?", 21));
- products.add(new Product("are your light on?", 10));
- products.add(new Product("go to hell", 14));
- products.add(new Product("my name is red", 16));
- products.add(new Product("perl cookbook", 15));
- products.add(new Product("groovy in action", 20));
- products.add(new Product("ruby on rails", 100));
- }
- //分页显示商品
- public List findProduct(int pageNum, int pageSize) {
- int start = (pageNum - 1) * pageSize;
- int end = start + pageSize;
- int count = 0;
- List
ret = new ArrayList (); - for (int i = 0; i < products.size(); i++) {
- if (i < start)
- continue;
- if (i >= end)
- break;
- ret.add(products.get(i));
- }
- return ret;
- }
- //获得商品总数
- public int getCountOfProduct() {
- return products.size();
- }
- }
ListProductController .java
java 代码
- ProductController.java
- public class ListProductController extends AbstractController {
- private ProductService productService;
- private int maxRows;
- public void setProductService(ProductService productService) {
- this.productService = productService;
- }
- public void setMaxRows(int maxRows) {
- this.maxRows = maxRows;
- }
- protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
- //step1 创建limit( 包括查询条件,排序,分页信息等)
- 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());
- //step2 创建 CoreContext
- CoreContextFactory factory = new CoreContextFactoryImpl(webContext);
- CoreContext coreContext = factory.createCoreContext(items, limit);
- //step3 创建 table
- HtmlTableFactory tableFactory = new HtmlTableFactory(webContext, coreContext);
- HtmlTable table = tableFactory.createTable("id", "name", "price", "createdTime");
- table.setCaption("products");
- table.getTableRenderer().setWidth("600px;");
- ToolbarFactory toolbarFactory = new ToolbarFactoryImpl(table, webContext, coreContext);
- Toolbar toolbar = toolbarFactory.createToolbar();
- View view = new HtmlView(table, toolbar, coreContext);
- Object result = view.render();
- request.setAttribute("products",result);
- return new ModelAndView("list.jsp");
- }
- }
list.jsp
java 代码
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- 浏览: 83857 次

- 详细资料
搜索本博客
最近加入圈子
链接
最新评论
-
JBPM gop的四个模型
...
-- by protess123 -
另类的Jquery与Prototype ...
这个方案更合适现有Jquery的代码升级至Jquery + prototypt。 ...
-- by ayeah -
介绍ExtremeTable的下一代 ...
还是不喜欢用taglib
-- by baichinie -
Jmesa系列(三)开始使用 ...
也不算就很长了, WebContext webContext = new H ...
-- by spiritfrog -
介绍ExtremeTable的下一代 ...
不好意思,刚没注意有个附件就是demo的。
-- by spiritfrog






评论排行榜