- 浏览: 414064 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
yan789654100:
先谢谢了,去研究一下
Java网络围棋游戏源码含大厅,仿QQ游戏 -
dan0773:
火狐里面用不了
梅花雨日历控件源码,及应用实例 -
左手边:
挺好的不错
Velocity教程 -
liuxuejin:
既然是教程,连个例子都没有!顶多是个笔记而已
Velocity教程 -
sky_pearl:
泪奔……求大厅代码!!!
Java网络围棋游戏源码含大厅,仿QQ游戏
jmesa 使用指南
1、关于jmesa
开始搭建新的基于struts2+spring+hibernate的技术架构,基于以前对eXtremeTable的好感,决定继续采用extremetable,而不选用displaytag和valuelist。用google搜索发现eXtremeTable的作者己不再更新eXtremeTable,其把精力转移到了新的项目-JMesa。
However, now that JMesa is up to release 2.1 I am only focusing my efforts on that library. The JMesa API has really turned into the library I have always wanted to create. With the introduction of the tags and facade in release 2.1 building tables is now easier than ever. I would encourage developers that are able to run in a JDK1.5 and JSP2.0 container to start using JMesa. If you are interested in a full explanation about how JMesa came about you can read more on the JMesa site. If you are more interested in what JMesa offers over the eXtremeTable read the features list.
2、基于struts2+spring+hibernate+jquery的jmesa分页实现样例
2.1、需求场景
基于Jmesa,从数据库表Person中查询出记录,能够实现分页、排序、导出功能。同时结合Jquery,利用ajax实现对数据的删除操作。
2.2、环境说明
Jmesa: 2.3
Struts2 :2.0.11
Spring:2.5
Hibernate:3.2.5
Jquery:jquery-1.2.1.pack,jquery.bgiframe.pack
Tomcat:5.5
Mysql :5.0
数据库、页面、JVM编码统一为GBK
2.3、数据库表结构
CREATE TABLE `person` ( `id` int(10) unsigned NOT NULL auto_increment, `firstName` varchar(45) NOT NULL, `lastName` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=76 DEFAULT CHARSET=latin1;
2.4、页面list.jsp
<%@ taglib prefix="s" uri="/struts-tags"%> <%@ page language="java" errorPage="/error.jsp" pageEncoding="GBK" contentType="text/html;charset=GBK" %> <html> <head> <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/css/web.css"></link> <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/css/jmesa.css"></link> <!-- 对jmesa.js脚本的应用必须放到头部,而不能放到尾部 --> <script type="text/javascript" src="<%= request.getContextPath() %>/js/jmesa.js"></script> </head> <body> <p>Jmesa表单组件使用演示样例</p> <form name="personForm" action="<%= request.getContextPath() %>/list.action" method="post"> <div id="persons"> <% out.println(request.getAttribute("myhtml")); %> </div> </form> <script type="text/javascript"> function onInvokeAction(id) { setExportToLimit(id, ''); createHiddenInputFieldsForLimitAndSubmit(id); } function onInvokeExportAction(id) { var parameterString = createParameterStringForLimit(id); location.href = '<%= request.getContextPath() %>/list.action?' + parameterString; } function delUser(tableId,rowId) { var parameterString = createParameterStringForLimit(tableId); $.get("<%= request.getContextPath() %>/ajax.action?id="+rowId+"&"+parameterString, function(data) { $("#persons").html(data) }); } </script> <script type="text/javascript" src="<%= request.getContextPath() %>/js/jquery-1.2.1.pack.js"></script> <script type="text/javascript" src="<%= request.getContextPath() %>/js/jquery.bgiframe.pack.js"></script> </body> </html>
2.4、Action代码
package com.mobilesoft.esales.webapp.action; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import jxl.demo.CSV; import org.apache.commons.beanutils.BeanUtils; import org.jmesa.facade.TableFacade; import org.jmesa.facade.TableFacadeImpl; import org.jmesa.limit.Limit; import com.mobilesoft.esales.dao.hibernate.Person; import com.mobilesoft.esales.service.PersonService; import com.octo.captcha.service.CaptchaServiceException; import com.opensymphony.xwork2.Action; import static org.jmesa.limit.ExportType.CSV; import static org.jmesa.limit.ExportType.JEXCEL; import static org.jmesa.limit.ExportType.PDF; import org.jmesa.core.filter.DateFilterMatcher; import org.jmesa.core.filter.MatcherKey; import org.jmesa.facade.TableFacade; import org.jmesa.facade.TableFacadeImpl; import org.jmesa.limit.Limit; import org.jmesa.util.ItemUtils; import org.jmesa.view.component.Column; import org.jmesa.view.component.Row; import org.jmesa.view.component.Table; import org.jmesa.view.editor.BasicCellEditor; import org.jmesa.view.editor.CellEditor; import org.jmesa.view.editor.DateCellEditor; import org.jmesa.view.html.HtmlBuilder; import org.jmesa.view.html.component.HtmlColumn; import org.jmesa.view.html.component.HtmlRow; import org.jmesa.view.html.component.HtmlTable; import org.jmesa.view.html.editor.DroplistFilterEditor; import sun.text.CompactShortArray.Iterator; /** * 用于演示基于jmesa(http://code.google.com/p/jmesa/)的分页、排序组件的使用方法, * 在src/java/com/mobilesoft/esales/dao/hibernate/person.sql有Person表的测试数据 * @author <a href="mailto:liangchuan@mobile-soft.cn">liangchuan</a> * @since 2008-03 */ public class PersonAction extends BaseAction { private PersonService personService; private List<Person> persons; private Person person; private Integer id; private String tableId; public String execute() { this.persons = personService.findAll(); //创建id为tableId为表单 //<table id="tableId" border="0" cellpadding="0" cellspacing="0" class="table" width="600px" > TableFacade tableFacade = new TableFacadeImpl("tableId", getRequest()); //设定页面分页数据 tableFacade.setItems(persons); //设定支持的查询结果导出格式为csv,excel,pdf格式 tableFacade.setExportTypes(getResponse(), CSV, JEXCEL, PDF); tableFacade.setStateAttr("restore"); Limit limit = tableFacade.getLimit(); if (limit.isExported()) { export(tableFacade); return null; } else { String html = html(tableFacade); getRequest().setAttribute("myhtml", html); } return Action.SUCCESS; } private String html(TableFacade tableFacade) { // 设定表格属性,注意此处的url用于诸如增加、删除、修改、查询操作,并不是实际的数据库表属性, //但表单需要有对应的po对新,因此需要在Person中增加此属性 tableFacade.setColumnProperties("id", "firstName", "lastName", "url"); HtmlTable table = (HtmlTable) tableFacade.getTable(); table.setCaption("测试用户信息列表"); table.getTableRenderer().setWidth("600px"); HtmlRow row = table.getRow(); HtmlColumn id = row.getColumn("id"); id.setTitle("id"); HtmlColumn firstName = row.getColumn("firstName"); firstName.setTitle("属性1"); HtmlColumn lastName = row.getColumn("lastName"); lastName.setTitle("属性2"); HtmlColumn deleteAction = row.getColumn("url"); deleteAction.setTitle("操作"); // Using an anonymous class to implement a custom editor. // 用于演示在表格中增加超链接 firstName.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://www.mobile-soft.cn") .quote().close(); html.append(value); html.aEnd(); return html.toString(); } }); // Using an anonymous class to implement a custom editor. //用于演示在表格中增加javascript操作,通过jquery来实现ajax式的删除操作 deleteAction.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(); //取得每一行的id号 Object id = ItemUtils.getItemValue(item, "id"); String js=" onclick='javascript:del(\"tableId\","+id+") '"; html.a().append(js).href().quote().append(getRequest().getContextPath()+"/remove.action?id="+id).quote().close(); html.append("删除"); html.aEnd(); return html.toString(); } }); return tableFacade.render(); // Return the Html. } private void export(TableFacade tableFacade) { tableFacade.setColumnProperties("id", "firstName", "lastName"); Table table = tableFacade.getTable(); table.setCaption("Persons Test"); Row row = table.getRow(); Column id = row.getColumn("id"); id.setTitle("id"); Column firstName = row.getColumn("firstName"); firstName.setTitle("First Name"); Column lastName = row.getColumn("lastName"); lastName.setTitle("Last Name"); tableFacade.render(); } public String login() { Boolean isResponseCorrect = Boolean.FALSE; // remenber that we need an id to validate! String captchaId = getSession().getId(); // retrieve the response String response = getRequest().getParameter("j_captcha_response"); // Call the Service method try { isResponseCorrect = CaptchaServiceSingleton.getInstance() .validateResponseForID(captchaId, response); } catch (CaptchaServiceException e) { // should not happen, may be thrown if the id is not valid } if (!isResponseCorrect) { return Action.LOGIN; } return execute(); } public String save() { this.personService.save(person); this.person = new Person(); return execute(); } /** * 用于演示ajax方式删除操作,参看pages/list.jsp * @return */ public String remove() { String deleteId = getRequest().getParameter("id"); if (deleteId != null) { personService.remove(Integer.parseInt(deleteId)); } this.persons = personService.findAll(); TableFacade tableFacade = new TableFacadeImpl("tableId", getRequest()); tableFacade.setItems(persons); // set the items tableFacade.setExportTypes(getResponse(), CSV, JEXCEL, PDF); tableFacade.setStateAttr("restore"); Limit limit = tableFacade.getLimit(); if (limit.isExported()) { export(tableFacade); return null; } else { String html = html(tableFacade); getRequest().setAttribute("myhtml", html); } return Action.SUCCESS; } public List<Person> getPersons() { return persons; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public void prepare() throws Exception { if (id != null) person = personService.find(id); } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } /** * @return the personService */ public PersonService getPersonService() { return personService; } /** * @param personService * the personService to set */ public void setPersonService(PersonService personService) { this.personService = personService; } /** * @return the tableId */ public String getTableId() { return tableId; } /** * @param tableId * the tableId to set */ public void setTableId(String tableId) { this.tableId = tableId; } }
2.5、Service、DAO层代码
无特别的,省略
2.6、Model代码
package com.mobilesoft.esales.dao.hibernate; /** * Person entity. * * @author <a href="mailto:liangchuan@mobile-soft.cn">liangchuan</a>
*/ public class Person implements java.io.Serializable { // Fields private Integer id; private String firstName; private String lastName; private String url=""; // Constructors /** default constructor */ public Person() { } /** full constructor */ public Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getFirstName() { return this.firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return this.lastName; } public void setLastName(String lastName) { this.lastName = lastName; } /** * @return the url */ public String getUrl() { return url; } /** * @param url the url to set */ public void setUrl(String url) { this.url = url; } }
2.7、Struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.objectFactory" value="spring"/> <constant name="struts.devMode" value="true"/> <constant name="struts.i18n.encoding" value="GBK"/> <constant name="struts.action.extension" value="action"/> <constant name="struts.custom.i18n.resources" value="ApplicationResources,errors"/> <constant name="struts.multipart.maxSize" value="2097152"/> <constant name="struts.multipart.saveDir" value="/resources"/> <constant name="struts.ui.theme" value="css_xhtml"/> <constant name="struts.enable.SlashesInActionNames" value="true"/> <package name="person" extends="struts-default"> <interceptors> <!-- Copied from struts-default.xml and changed validation exclude methods --> <interceptor-stack name="defaultStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servlet-config"/> <interceptor-ref name="prepare"/> <interceptor-ref name="i18n"/> <interceptor-ref name="chain"/> <interceptor-ref name="debugging"/> <interceptor-ref name="profiling"/> <interceptor-ref name="scoped-model-driven"/> <interceptor-ref name="model-driven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="static-params"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">cancel,execute,delete,edit,list</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack> <interceptor-stack name="fileUploadStack"> <interceptor-ref name="fileUpload"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <global-results> <result name="mainMenu" type="redirect">mainMenu.html</result> <result name="dataAccessFailure">pages/dataAccessFailure.jsp</result> </global-results> <global-exception-mappings> <exception-mapping exception="org.springframework.dao.DataAccessException" result="dataAccessFailure"/> </global-exception-mappings> <action name="list" method="execute" class="personAction"> <result name="success">pages/list.jsp</result> <result name="input">pages/list.jsp</result> </action> <action name="remove" class="personAction" method="remove"> <result name="success">pages/list.jsp</result> <result name="input">pages/list.jsp</result> </action> <action name="save" class="personAction" method="save"> <result name="success">pages/list.jsp</result> <result name="input">pages/list.jsp</result> </action> <action name="login" class="personAction" method="execute"> <result name="success">pages/list.jsp</result> <result name="login">/index.jsp</result> </action> <action name="uploadFile" class="com.mobilesoft.esales.webapp.action.FileUploadAction"> <interceptor-ref name="fileUploadStack"/> <result name="input">pages/uploadForm.jsp</result> <result name="success">pages/uploadDisplay.jsp</result> <result name="cancel" type="redirect">/index.jsp</result> </action> </package> </struts>
3、jmesa研究
<TBC>
4、参考资料
http://code.google.com/p/jmesa/w/list
http://blog.csdn.net/jockCreate/archive/2008/02/20/2110310.aspx
http://blog.csdn.net/czg18596/archive/2007/09/06/1774827.aspx
发表评论
-
Extjs 验证使用
2012-08-10 10:16 994/** * 用户表单面板 */ Ext.def ... -
使用ext的store.load 之后然后使用store.getCount 值为零解决办法
2012-07-13 09:12 1231使用ext的store.load(),之后然后使用store. ... -
什么样的cms系统算是强大
2012-07-10 17:41 988现在建站的cms系统层出不穷。从简单的到功能复杂的。从功 ... -
OpenCV背景去除的几种方法(转)
2012-07-02 10:15 8603OpenCV背景去除的几种方法 1、肤色侦测法 肤 ... -
error: command 'mt.exe' failed with exit status 31
2012-06-18 17:39 2425python setup.py build_ext -i ... -
MyBatis 3 + Spring3 多数据源配置
2012-02-27 14:50 1382详细内容地址: 终于把 MyBatis 3 和 Sp ... -
Google Earth 开发示例(Hello World)
2011-04-13 17:06 1631Google Earth Hello World 示例 &l ... -
DB2 分页查询方法,查询top N 条记录
2011-01-13 18:50 28111. db2分页查询sql select * f ... -
Birt 中的通过Script加入调试输出SQL语句代码
2010-11-18 15:54 1412用Brit制作报表时可通过在Script脚本中加入以下代码输出 ... -
TSM - Creating an include-exclude list (optional)
2010-06-09 11:00 1561Creating an include-exclude l ... -
TSM - Configuring the Web client
2010-06-09 10:51 933Configuring the Web client The ... -
Linux下 Tsm 服务器、客户端安装配置全过程
2010-05-17 10:06 1752系统环境:LINUX AS5 存储:IBM DS400 ... -
安装DB2补丁步骤
2009-10-27 17:30 17661. 通过运行 su - root ... -
WAS 6.0.2.9 部署应用使用过滤器问题解决办法
2009-08-05 16:07 1441支撑环境: IBM WebSphere Application ... -
MyEclipse5.5GA配置Websphere V6.1 全过程(详细版)
2009-07-16 13:32 1285转载自:http://blog.chinaunix.net/u ... -
WebSphere Application Server 6.0.2.9 配置 SqlServer 2000 SP2时出错问题解决
2009-07-15 12:56 1835WebSphere Application Server 6. ... -
WAS 5.1 部署应用容器属性配置
2009-07-07 14:52 2546WAS 5.1 部署应用容器属性配置 引用地址:http:/ ... -
Struts JSR168 Portlet using the ITIM API
2009-06-02 19:29 982Leveraging the IBM Tivoli Ident ... -
ITIM API
2009-06-02 19:22 942ITIM API http://publib.boulder ... -
打开IBM WebSphere Portal trace 收集
2009-05-26 10:37 1431Collecting login-specific infor ...
相关推荐
- **org.jmesa.core.preference**:处理 JMESA 的选项,使用 Java 的 `Properties` 类实现用户配置的存储。 2. **org.jmesa.limit**:提供过滤功能,通过 `Limit` 接口控制数据流,可以保存用户查询时的参数,如...
本文将分享在Struts2环境中成功使用Jmesa的经验和心得。 首先,我们需要了解基础环境配置。本例中使用的Struts2版本为2.0.11,Spring为2.5.1,Freemarker为2.3.12,而Jmesa则是2.2.9。开发环境选用的是Eclipse 3.3...
jmesa.jar jmesa.jar
在这个例子中,"TestJmesa"可能是一个包含Jmesa使用示例的Java类。通常,这样的例子会展示如何创建数据流、定义处理逻辑、设置窗口以及如何从数据流中提取和分析信息。我们可能需要通过阅读源代码来理解具体的实现...
1. **list.jsp**:这通常是一个示例页面,演示了如何在实际应用中使用Jmesa标签来展示数据列表。 2. **css**:这个目录包含CSS样式文件,用于定义表格的外观和布局,使表格更加美观和易于阅读。 3. **WEB-INF**:...
例如,使用jmesa读取CSV文件,进行数据清洗,然后应用统计模型进行预测,最后将结果以图表形式展示出来。 五、总结 jmesa2.3.4凭借其全面的功能、良好的兼容性和高效的性能,成为数据科学家和开发者的得力助手。...
本文将深入探讨JMESa的基本概念、使用方法以及它的优势。 ### 1. JMESa简介 JMESa是基于Java的,设计灵感来源于JSON Path和JMESPath,它扩展了这些语言,使其能够直接应用于SQL查询。这种工具特别适合于那些需要...
JMESA,全称Java Medical Image Analysis,是一个用于医学图像分析和处理的开源库。它提供了丰富的功能,包括图像显示、处理...同时,积极参与开源社区,及时获取更新和支持,会让你在使用JMESA的过程中更加得心应手。
1. **SQL查询支持**:JMESA支持标准的SQL语法,允许开发者使用熟悉的SQL语句来查询数据库。这不仅降低了学习成本,也使得数据库操作更为直观。 2. **高性能**:JMESA采用优化的查询执行引擎,能够处理大规模的数据...
对于想要学习JMESa和医疗图像处理的开发者来说,这些源代码是非常宝贵的参考资料,能够帮助他们快速理解并上手JMESa的使用。同时,通过示例应用,也可以了解到如何将JMESa与Java Web容器(如Tomcat)集成,以及如何...
jmesa表格标签 依赖包 jmesa-3.0.jar
jmesa-2.4.4.jar 有源码
例如,我们可以使用JMESA读取数据库中的数据,然后将其转化为JSON对象,以便于前端解析。 前端接收到服务器响应的JSON数据后,利用JavaScript解析JSON,更新JMESA表格的内容。JMESA提供了一些API,比如`updateTable...
** JMESA SERVLET ** JMESA(Java Model for Export and...通过这个项目,开发者可以学习到如何使用基本的Servlet技术结合JMESA库实现数据导出,同时了解Web应用程序的基本工作流程,为今后学习更高级的框架打下基础。
描述中提到的“博文链接:https://liuzidong.iteye.com/blog/789767” 是一篇关于Jmesa使用的详细介绍文章,可能包含了如何实现上述功能的具体步骤和示例代码,由于描述部分为空,我们无法获取更多细节,但可以推测...
jmesa-snapshot.jar jmesa用到的jar
jmesa-3.0.4 最新版 供大家学习下载
`jmesaExample`这个文件很可能是包含了一个或多个示例程序,展示了如何使用JMESA进行数据处理。源码中可能会包括以下步骤: 1. 导入JMESA库。 2. 创建数据结构(如数组、矩阵或超立方体)。 3. 填充数据或读取外部...
3. **调用分页方法**:使用JMESa提供的API进行分页操作,如`Pageable list = jmesa.paginate(startIndex, pageSize);`,其中startIndex和pageSize分别代表起始索引和每页大小。 4. **渲染视图**:在前端界面使用...
官方提供的另外一种方法的实现。 有排序和过滤。 而且能支持大数据量的查询。