基于struts2+spring+hibernate+jquery的jmesa分页实现样例(转)

来源:百度文库 编辑:神马文学网 时间:2024/04/29 12:51:59
于Jmesa,从数据库表Person中查询出记录,能够实现分页、排序、导出功能。同时结合Jquery,利用ajax实现对数据的删除操作。Html代码
  1. Jmesa: 2.3   
  2.   
  3. Struts2 :2.0.11   
  4.   
  5. Spring:2.5   
  6.   
  7. Hibernate:3.2.5   
  8.   
  9. Jquery:jquery-1.2.1.pack,jquery.bgiframe.pack   
  10.   
  11. Tomcat:5.5   
  12.   
  13. Mysql :5.0   
  14.   
  15. 数据库、页面、JVM编码统一为GBK  
 

数据库表结构:

Sql代码
  1. CREATE TABLE `person` (   
  2.   `id` int(10) unsigned NOT NULL auto_increment,   
  3.   `firstName` varchar(45) NOT NULL,   
  4.   `lastName` varchar(45) NOT NULL,   
  5.   PRIMARY KEY  (`id`)   
  6. ) ENGINE=MyISAM AUTO_INCREMENT=76 DEFAULT CHARSET=latin1;   

页面list.jsp:

Html代码
  1. <%@ taglib prefix=“s” uri=“/struts-tags”%>  
  2. <%@ page language=“java” errorPage=“/error.jsp” pageEncoding=“GBK” contentType=“text/html;charset=GBK” %>  
  3.   
  4.   
  5.  rel=“stylesheet” type=“text/css” href=“<%= request.getContextPath() %>/css/web.css”>  
  6.  rel=“stylesheet” type=“text/css” href=“<%= request.getContextPath() %>/css/jmesa.css”>  
  7. 对jmesa.js脚本的应用必须放到头部,而不能放到尾部   
  8. >  
  9.  type=“text/javascript” src=“<%= request.getContextPath() %>/js/jmesa.js”>  
  10.   
  11.   
  12. Jmesa表单组件使用演示样例

      
  13.   
  14.  name=“personForm” action=“<%= request.getContextPath() %>/list.action” method=“post”>  
  15.  id=“persons”>  
  16. <%   
  17.     out.println(request.getAttribute(“myhtml”));   
  18. %>  
  
  •   
  •   
  •  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)   
  •     });   
  •   
  • }   
  •   
  •  type=“text/javascript” src=“<%= request.getContextPath() %>/js/jquery-1.2.1.pack.js”>  
  •  type=“text/javascript” src=“<%= request.getContextPath() %>/js/jquery.bgiframe.pack.js”>  
  •   
  •   
  •   
  • Action代码:

    Java代码
    1. package com.mobilesoft.esales.webapp.action;   
    2.   
    3. import java.io.IOException;   
    4. import java.lang.reflect.InvocationTargetException;   
    5. import java.util.ArrayList;   
    6. import java.util.List;   
    7.   
    8. import javax.servlet.http.HttpServletRequest;   
    9.   
    10. import jxl.demo.CSV;   
    11.   
    12. import org.apache.commons.beanutils.BeanUtils;   
    13. import org.jmesa.facade.TableFacade;   
    14. import org.jmesa.facade.TableFacadeImpl;   
    15. import org.jmesa.limit.Limit;   
    16.   
    17. import com.mobilesoft.esales.dao.hibernate.Person;   
    18. import com.mobilesoft.esales.service.PersonService;   
    19. import com.octo.captcha.service.CaptchaServiceException;   
    20. import com.opensymphony.xwork2.Action;   
    21. import static org.jmesa.limit.ExportType.CSV;   
    22. import static org.jmesa.limit.ExportType.JEXCEL;   
    23. import static org.jmesa.limit.ExportType.PDF;   
    24. import org.jmesa.core.filter.DateFilterMatcher;   
    25. import org.jmesa.core.filter.MatcherKey;   
    26. import org.jmesa.facade.TableFacade;   
    27. import org.jmesa.facade.TableFacadeImpl;   
    28. import org.jmesa.limit.Limit;   
    29. import org.jmesa.util.ItemUtils;   
    30. import org.jmesa.view.component.Column;   
    31. import org.jmesa.view.component.Row;   
    32. import org.jmesa.view.component.Table;   
    33. import org.jmesa.view.editor.BasicCellEditor;   
    34. import org.jmesa.view.editor.CellEditor;   
    35. import org.jmesa.view.editor.DateCellEditor;   
    36. import org.jmesa.view.html.HtmlBuilder;   
    37. import org.jmesa.view.html.component.HtmlColumn;   
    38. import org.jmesa.view.html.component.HtmlRow;   
    39. import org.jmesa.view.html.component.HtmlTable;   
    40. import org.jmesa.view.html.editor.DroplistFilterEditor;   
    41.   
    42. import sun.text.CompactShortArray.Iterator;   
    43.   
    44. /**  
    45.  * 用于演示基于jmesa(http://code.google.com/p/jmesa/)的分页、排序组件的使用方法,  
    46.  * 在src/java/com/mobilesoft/esales/dao/hibernate/person.sql有Person表的测试数据  
    47.  * @author liangchuan   
    48.  * @since 2008-03  
    49.  */  
    50. public class PersonAction extends BaseAction {   
    51.     private PersonService personService;   
    52.     private List persons;   
    53.     private Person person;   
    54.     private Integer id;   
    55.     private String tableId;   
    56.   
    57.     public String execute() {   
    58.         this.persons = personService.findAll();   
    59.         //创建id为tableId为表单   
    60.         //   
    61.         TableFacade tableFacade = new TableFacadeImpl(“tableId”, getRequest());   
    62.         //设定页面分页数据   
    63.         tableFacade.setItems(persons);   
    64.         //设定支持的查询结果导出格式为csv,excel,pdf格式   
    65.         tableFacade.setExportTypes(getResponse(), CSV, JEXCEL, PDF);   
    66.         tableFacade.setStateAttr(“restore”);   
    67.         Limit limit = tableFacade.getLimit();   
    68.         if (limit.isExported()) {   
    69.             export(tableFacade);   
    70.             return null;   
    71.         } else {   
    72.             String html = html(tableFacade);   
    73.             getRequest().setAttribute(“myhtml”, html);   
    74.         }   
    75.         return Action.SUCCESS;   
    76.     }   
    77.   
    78.     private String html(TableFacade tableFacade) {   
    79.         // 设定表格属性,注意此处的url用于诸如增加、删除、修改、查询操作,并不是实际的数据库表属性,   
    80.         //但表单需要有对应的po对新,因此需要在Person中增加此属性   
    81.         tableFacade.setColumnProperties(“id”, “firstName”, “lastName”, “url”);   
    82.   
    83.         HtmlTable table = (HtmlTable) tableFacade.getTable();   
    84.         table.setCaption(“测试用户信息列表”);   
    85.         table.getTableRenderer().setWidth(“600px”);   
    86.   
    87.         HtmlRow row = table.getRow();   
    88.   
    89.         HtmlColumn id = row.getColumn(“id”);   
    90.         id.setTitle(“id”);   
    91.   
    92.         HtmlColumn firstName = row.getColumn(“firstName”);   
    93.         firstName.setTitle(“属性1″);   
    94.   
    95.         HtmlColumn lastName = row.getColumn(“lastName”);   
    96.         lastName.setTitle(“属性2″);   
    97.   
    98.         HtmlColumn deleteAction = row.getColumn(“url”);   
    99.         deleteAction.setTitle(“操作”);   
    100.   
    101.         // Using an anonymous class to implement a custom editor.   
    102.         // 用于演示在表格中增加超链接   
    103.         firstName.getCellRenderer().setCellEditor(new CellEditor() {   
    104.             public Object getValue(Object item, String property, int rowcount) {   
    105.                 Object value = new BasicCellEditor().getValue(item, property,   
    106.                         rowcount);   
    107.                 HtmlBuilder html = new HtmlBuilder();   
    108.                 html.a().href().quote().append(“http://www.mobile-soft.cn”)   
    109.                         .quote().close();   
    110.                 html.append(value);   
    111.                 html.aEnd();   
    112.                 return html.toString();   
    113.             }   
    114.         });   
    115.   
    116.         // Using an anonymous class to implement a custom editor.   
    117.         //用于演示在表格中增加javascript操作,通过jquery来实现ajax式的删除操作   
    118.         deleteAction.getCellRenderer().setCellEditor(new CellEditor() {   
    119.             public Object getValue(Object item, String property, int rowcount) {   
    120.                 Object value = new BasicCellEditor().getValue(item, property,   
    121.                         rowcount);   
    122.                 HtmlBuilder html = new HtmlBuilder();   
    123.                 //取得每一行的id号   
    124.                 Object id = ItemUtils.getItemValue(item, “id”);   
    125.                 String js=” onclick=’javascript:del(\”tableId\”,”+id+“) ‘”;   
    126.                 html.a().append(js).href().quote().append(getRequest().getContextPath()+“/remove.action?id=”+id).quote().close();   
    127.                 html.append(“删除”);   
    128.                 html.aEnd();   
    129.                 return html.toString();   
    130.             }   
    131.         });   
    132.   
    133.         return tableFacade.render(); // Return the Html.   
    134.     }   
    135.   
    136.     private void export(TableFacade tableFacade) {   
    137.         tableFacade.setColumnProperties(“id”, “firstName”, “lastName”);   
    138.   
    139.         Table table = tableFacade.getTable();   
    140.         table.setCaption(“Persons Test”);   
    141.   
    142.         Row row = table.getRow();   
    143.   
    144.         Column id = row.getColumn(“id”);   
    145.         id.setTitle(“id”);   
    146.   
    147.         Column firstName = row.getColumn(“firstName”);   
    148.         firstName.setTitle(“First Name”);   
    149.   
    150.         Column lastName = row.getColumn(“lastName”);   
    151.         lastName.setTitle(“Last Name”);   
    152.   
    153.         tableFacade.render();   
    154.     }   
    155.   
    156.     public String login() {   
    157.         Boolean isResponseCorrect = Boolean.FALSE;   
    158.         // remenber that we need an id to validate!   
    159.         String captchaId = getSession().getId();   
    160.         // retrieve the response   
    161.         String response = getRequest().getParameter(“j_captcha_response”);   
    162.         // Call the Service method   
    163.         try {   
    164.             isResponseCorrect = CaptchaServiceSingleton.getInstance()   
    165.                     .validateResponseForID(captchaId, response);   
    166.         } catch (CaptchaServiceException e) {   
    167.             // should not happen, may be thrown if the id is not valid   
    168.         }   
    169.         if (!isResponseCorrect) {   
    170.             return Action.LOGIN;   
    171.         }   
    172.         return execute();   
    173.     }   
    174.   
    175.     public String save() {   
    176.         this.personService.save(person);   
    177.         this.person = new Person();   
    178.         return execute();   
    179.     }   
    180.     /**  
    181.      * 用于演示ajax方式删除操作,参看pages/list.jsp  
    182.      * @return  
    183.      */  
    184.     public String remove() {   
    185.         String deleteId = getRequest().getParameter(“id”);   
    186.   
    187.         if (deleteId != null) {   
    188.             personService.remove(Integer.parseInt(deleteId));   
    189.         }   
    190.         this.persons = personService.findAll();   
    191.         TableFacade tableFacade = new TableFacadeImpl(“tableId”, getRequest());   
    192.         tableFacade.setItems(persons); // set the items   
    193.         tableFacade.setExportTypes(getResponse(), CSV, JEXCEL, PDF);   
    194.         tableFacade.setStateAttr(“restore”);   
    195.         Limit limit = tableFacade.getLimit();   
    196.         if (limit.isExported()) {   
    197.             export(tableFacade);   
    198.             return null;   
    199.         } else {   
    200.             String html = html(tableFacade);   
    201.             getRequest().setAttribute(“myhtml”, html);   
    202.         }   
    203.         return Action.SUCCESS;   
    204.   
    205.     }   
    206.   
    207.     public List getPersons() {   
    208.         return persons;   
    209.     }   
    210.   
    211.     public Integer getId() {   
    212.         return id;   
    213.     }   
    214.   
    215.     public void setId(Integer id) {   
    216.         this.id = id;   
    217.     }   
    218.   
    219.     public void prepare() throws Exception {   
    220.         if (id != null)   
    221.             person = personService.find(id);   
    222.     }   
    223.   
    224.     public Person getPerson() {   
    225.         return person;   
    226.     }   
    227.   
    228.     public void setPerson(Person person) {   
    229.         this.person = person;   
    230.     }   
    231.   
    232.     /**  
    233.      * @return the personService  
    234.      */  
    235.     public PersonService getPersonService() {   
    236.         return personService;   
    237.     }   
    238.   
    239.     /**  
    240.      * @param personService  
    241.      *            the personService to set  
    242.      */  
    243.     public void setPersonService(PersonService personService) {   
    244.         this.personService = personService;   
    245.     }   
    246.   
    247.     /**  
    248.      * @return the tableId  
    249.      */  
    250.     public String getTableId() {   
    251.         return tableId;   
    252.     }   
    253.   
    254.     /**  
    255.      * @param tableId  
    256.      *            the tableId to set  
    257.      */  
    258.     public void setTableId(String tableId) {   
    259.         this.tableId = tableId;   
    260.     }   
    261.   
    262. }