相关文章:
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
省略Spring配置文件及Web.xml
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 <product> products; </product>
- static {
- products = new ArrayList <product>(); </product>
- 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 <product> ret = new ArrayList <product>(); </product> </product>
- 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" %>
- <script type=<span class="string">"text/javascript" src="scripts/jmesa.js"></script>
- <script type=<span class="string">"text/javascript">
- function onInvokeAction(id) {
- setExportToLimit(id, '');
- createHiddenInputFieldsForLimitAndSubmit(id);
- }
- </script>
-
Product listing
- <%
- out.println(request.getAttribute("products"));
- %>