每次遇到写文章内容比较多的博文都感觉比较麻烦,但是以前也是看着前辈们的博客过来的,所以我也开始分析一下我的博文了,话不多说,就来实现一下SSH+EasyUi完成CRUD
首先我们看一下后台实现的基本效果
那么我就直接上代码吧,这样比较直接,遇到容易出问题的地方就简单说一下
首先是配置文件
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/beans.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:component-scan base-package="com.schoolaround.*"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/schoolaround?useUnicode=true&characterEncoding=UTF-8"/> <property name="user" value="root"/> <property name="password" value="root"/> <property name="initialPoolSize" value="3"/> <property name="minPoolSize" value="5"/> <property name="maxPoolSize" value="20"/> <property name="maxIdleTime" value="120"/> <property name="acquireIncrement" value="2"/> <property name="idleConnectionTestPeriod" value="60"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingResources"> <list> <value>com/schoolaround/pojo/Shop.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=false </value> </property> </bean> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <tx:annotation-driven transaction-manager="txManager"/> </beans>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.devMode" value="true" /> <constant name="struts.multipart.maxSize" value="2147483648"/> <constant name="struts.objectFactory" value="spring" /> <package name="shop" namespace="/" extends="struts-default,json-default"> <action name="shop" class="com.schoolaround.action.ShopControlAction" method="shop"> <result>/admin/shopcontrol.jsp</result> </action> <action name="save" class="com.schoolaround.action.ShopControlAction" method="save"> <result type="redirect">/admin/shopcontrol.jsp</result> </action> <action name="list" class="com.schoolaround.action.ShopControlAction" method="list"> <result type="json"><param name="root">jsonResult</param></result> </action> <action name="delete" class="com.schoolaround.action.ShopControlAction" method="delete"> <result type="redirect">/admin/shopcontrol.jsp</result> </action> <action name="update" class="com.schoolaround.action.ShopControlAction" method="update"> <result>/admin/shopcontrol.jsp</result> </action> </package> </struts>POJO文件
Shop.java
package com.schoolaround.pojo; public class Shop { private int shopid; private String shopname; private String shoplocation; private int shopcid; private String goodsidlist; private String shopimage; public int getShopid() { return shopid; } public void setShopid(int shopid) { this.shopid = shopid; } public String getShopname() { return shopname; } public void setShopname(String shopname) { this.shopname = shopname; } public String getShoplocation() { return shoplocation; } public void setShoplocation(String shoplocation) { this.shoplocation = shoplocation; } public int getShopcid() { return shopcid; } public void setShopcid(int shopcid) { this.shopcid = shopcid; } public String getGoodsidlist() { return goodsidlist; } public void setGoodsidlist(String goodsidlist) { this.goodsidlist = goodsidlist; } public String getShopimage() { return shopimage; } public void setShopimage(String shopimage) { this.shopimage = shopimage; } }
Shop.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.schoolaround.pojo"> <class name="Shop" table="shop"> <id name="shopid" type="int"> <column name="shopid"/> <generator class="increment" /> </id> <property name="shopname" length="10"></property> <property name="shoplocation" length="10"></property> <property name="shopcid" length="10"></property> <property name="goodsidlist" length="10"></property> <property name="shopimage" length="10"></property> </class> </hibernate-mapping>
dao接口:ShopDao.java
package com.schoolaround.dao; import java.util.List; import com.schoolaround.pojo.Shop; public interface ShopDao { public void add(Shop shop); public void deleteShop(int id); public Shop findShopById(int id); public List<Shop> findAllShop(); public void updateShop(Shop shop); public List getShopList(String page, String rows); public int getShopTotal() throws Exception; }
package com.schoolaround.dao.impl; import java.io.Serializable; import java.util.List; import javax.annotation.Resource; import org.hibernate.SessionFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.schoolaround.dao.ShopDao; import com.schoolaround.pojo.Shop; @Service(value="shopDao") @Transactional public class ShopDaoImpl implements ShopDao{ private SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return sessionFactory; } @Resource public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public void add(Shop shop){ this.sessionFactory.getCurrentSession().save(shop); } public void deleteShop(int shopid){ Shop shop = findShopById(shopid); if(shop!=null){ this.sessionFactory.getCurrentSession().delete(shop); } } public Shop findShopById(int shopid){ return (Shop)sessionFactory.getCurrentSession().get(Shop.class,shopid); } public List<Shop> findAllShop(){ return sessionFactory.getCurrentSession().createQuery("from Shop group by shopid").list(); } public void updateShop(Shop shop){ sessionFactory.getCurrentSession().update(shop); } // 根据第几页获取,每页几行获取数据 public List getShopList(String page, String rows) { //当为缺省值的时候进行赋值 int currentpage = Integer.parseInt((page == null || page == "0") ? "1": page);//第几页 int pagesize = Integer.parseInt((rows == null || rows == "0") ? "10": rows);//每页多少行 List list = this.sessionFactory.getCurrentSession().createQuery("from Shop group by shopid") .setFirstResult((currentpage - 1) * pagesize).setMaxResults(pagesize).list(); return list; } // 统计一共有多少数据 public int getShopTotal() throws Exception { return this.sessionFactory.getCurrentSession().find("from Shop").size(); } }
Service接口:
ShopService.java
package com.schoolaround.service; import java.util.List; import com.schoolaround.pojo.Shop; public interface ShopService { public void saveShop(Shop shop); public List<Shop> shopList(); public void deleteShop(int shopid); public void editShop(Shop shop); public List getShopList(String page, String rows); public int getShopTotal() throws Exception; }Service接口实现
ShopServiceImpl.java
package com.schoolaround.service.impl; import java.util.List; import javax.annotation.Resource; import org.hibernate.SessionFactory; import org.springframework.stereotype.Service; import com.schoolaround.dao.ShopDao; import com.schoolaround.pojo.Shop; import com.schoolaround.service.ShopService; @Service(value="shopService") public class ShopServiceImpl implements ShopService{ private ShopDao shopDao; public ShopDao getShopDao() { return shopDao; } @Resource public void setShopDao(ShopDao shopDao) { this.shopDao = shopDao; } public void saveShop(Shop shop){ this.shopDao.add(shop); } public List<Shop> shopList(){ return this.shopDao.findAllShop(); } public void deleteShop(int shopid){ this.shopDao.deleteShop(shopid); } public void editShop(Shop shop){ this.shopDao.updateShop(shop); } public List getShopList(String page, String rows) { return this.shopDao.getShopList(page, rows); } // 统计一共有多少数据 public int getShopTotal() throws Exception{ return this.shopDao.getShopTotal(); } }
ShopControlAction.java
package com.schoolaround.action; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.schoolaround.tools.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import org.apache.struts2.json.annotations.JSON; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.schoolaround.dao.ShopDao; import com.schoolaround.pojo.Shop; import com.schoolaround.service.ShopService; @Controller @Scope(value = "prototype") public class ShopControlAction extends ActionSupport{ private int shopid; private String shopname; private String shoplocation; private int shopcid; private String goodsidlist; private String shopimage; private ShopService shopService; private List<Shop> shopList; private Map<String,Object> dataMap = new HashMap<String, Object>(); private String result = null; private String rows; private String page; private ShopDao shopDao; public int getShopid() { return shopid; } public void setShopid(int shopid) { this.shopid = shopid; } public ShopService getShopService() { return shopService; } @Resource public void setShopService(ShopService shopService) { this.shopService = shopService; } public ShopDao getShopDao() { return shopDao; } @Resource public void setShopDao(ShopDao shopDao) { this.shopDao = shopDao; } public String getShopname() { return shopname; } public void setShopname(String shopname) { this.shopname = shopname; } public String getShoplocation() { return shoplocation; } public void setShoplocation(String shoplocation) { this.shoplocation = shoplocation; } public int getShopcid() { return shopcid; } public void setShopcid(int shopcid) { this.shopcid = shopcid; } public String getGoodsidlist() { return goodsidlist; } public void setGoodsidlist(String goodsidlist) { this.goodsidlist = goodsidlist; } public String getShopimage() { return shopimage; } public void setShopimage(String shopimage) { this.shopimage = shopimage; } @JSON(serialize = false) public List<Shop> getShopList() { return shopList; } @JSON(serialize = false) public void setShopList(List<Shop> shopList) { this.shopList = shopList; } public String getRows() { return rows; } public void setRows(String rows) { this.rows = rows; } public String getPage() { return page; } public void setPage(String page) { this.page = page; } public String shop() throws Exception{ return SUCCESS; } //shop的列表显示 public String list() throws Exception{ List shop = shopDao.getShopList(page, rows); StringUtil.toBeJson(shop, shopDao.getShopTotal()); return null; } //保存shop数据 public String save() throws Exception{ Shop shop = new Shop(); shop.setShopid(1); shop.setShopname(shopname); shop.setShoplocation(shoplocation); shop.setGoodsidlist(goodsidlist); shop.setShopcid(shopcid); shop.setShopimage(shopimage); try{ this.shopService.saveShop(shop); result="{\"success\":true}"; StringUtil.writeToWeb(result, "html", ServletActionContext.getResponse()); }catch(Exception e){ //dataMap.put("msg", "保存失败"); result="{\"msg\":\"保存失败\"}"; StringUtil.writeToWeb(result, "html", ServletActionContext.getResponse()); } return SUCCESS; } //根据id删除shop数据 public String delete() throws Exception{ try{ this.shopService.deleteShop(shopid); dataMap.put("success", true); }catch(Exception e){ dataMap.put("errorMsg", "删除错误"); } JSONUtils.toJson(ServletActionContext.getResponse(), dataMap); return SUCCESS; } //根据id修该shop数据 public String update() throws Exception{ Shop shop = new Shop(); shop.setShopid(shopid); shop.setShopname(shopname); shop.setShoplocation(shoplocation); shop.setGoodsidlist(goodsidlist); shop.setShopcid(shopcid); shop.setShopimage(shopimage); try{ this.shopService.editShop(shop); result="{\"success\":true}"; StringUtil.writeToWeb(result, "html", ServletActionContext.getResponse()); }catch(Exception e){ result="{\"msg\":\"保存失败\"}"; StringUtil.writeToWeb(result, "html", ServletActionContext.getResponse()); } return SUCCESS; } public String execute() throws Exception{ return SUCCESS; } } 工具类我这里收集了两个工具类,所以读者根据自己需求进行选择
StringUtil.java
package com.schoolaround.tools; import java.io.IOException; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import org.apache.struts2.ServletActionContext; public class StringUtil { /** * 本方法封装了往前台设置的header,contentType等信息 * @param message 需要传给前台的数据 * @param type 指定传给前台的数据格式,如"html","json"等 * @param response HttpServletResponse对象 * @throws IOException */ public static void writeToWeb(String message, String type, HttpServletResponse response) throws IOException{ response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setContentType("text/" + type +"; charset=utf-8"); response.getWriter().write(message); response.getWriter().close(); } /** * 本方法用于分页页面数据json处理 * @param list * @param total * @throws Exception */ public static void toBeJson(List list, int total) throws Exception{ HttpServletResponse response = ServletActionContext.getResponse(); HttpServletRequest request = ServletActionContext.getRequest(); JSONObject jobj = new JSONObject(); jobj.accumulate("total", total); jobj.accumulate("rows", list); response.setCharacterEncoding("utf-8"); response.getWriter().write(jobj.toString()); //log.info(jobj.toString()); } }
package com.schoolaround.tools; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; import com.google.gson.Gson; public class JSONUtils { public static void toJson(HttpServletResponse response, Object data) throws IOException { Gson gson = new Gson(); String result = gson.toJson(data); response.setContentType("text/json; charset=utf-8"); response.setHeader("Cache-Control", "no-cache"); PrintWriter out = response.getWriter(); out.print(result); out.flush(); out.close(); } }
我是用主页面点击链接引入该页面的,这个就不多说
)
/admin/shopcontrol.jsp
<%@ page language="java" pageEncoding="utf-8"%> <script> var url; function newShop(){ $('#dlg_shop').dialog('open').dialog('setTitle','添加商家'); $('#fm_shop').form('clear'); url = 'save.action'; } function editShop(){ var row = $('#dg').datagrid('getSelected'); if (row){ $('#dlg_shop').dialog('open').dialog('setTitle','信息编辑'); $('#fm_shop').form('load',row); url = 'update.action?shopid='+row.shopid; } } function saveShop(){ $('#fm_shop').form('submit',{ url: url, onSubmit: function(){ return $(this).form('validate'); }, success: function(result){ var result = eval('('+result+')'); if (result.success){ $('#dlg_shop').dialog('close'); // close the dialog $('#dg').datagrid('reload'); // reload the user data } else { $.messager.show({ title: 'Error', msg: result.msg }); } } }); } function destroyShop(){ var row = $('#dg').datagrid('getSelected'); if (row){ $.messager.confirm('温馨提示','是否删除此行数据?',function(r){ if (r){ $.post('delete.action',{shopid:row.shopid},function(result){ if (result.success){ $('#dg').datagrid('reload'); // reload the user data } else { $.messager.show({ // show error message title: 'Error', msg: result.errorMsg }); } },'json'); } }); } } /*function saveUser(){ var shopname = $("#shopname").val(); //alert(shopname); var shoplocation = $("$shoplocation").val(); $('#fm_shop').submit(); }*/ </script> <table id="dg" title="商家管理" class="easyui-datagrid" style="width:950px;height:400px" data-options="toolbar:'#toolbar_shop',pagination:true,singleSelect:true,collapsible:true,url:'list.action',pageSize:10,pageList:[ 5, 10, 15, 20 ]"> <thead> <tr> <th data-options="field:'shopid',width:200">ShopId</th> <th data-options="field:'shopname',width:200">ShopName</th> <th data-options="field:'shoplocation',width:200">ShopLocation</th> <th data-options="field:'shopcid',width:200">ShopCId</th> </tr> </thead> </table> <div id="toolbar_shop"> <a href="#" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newShop()">添加商家</a> <a href="#" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editShop()">信息编辑</a> <a href="#" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyShop()">删除商家</a> </div> <div id="dlg_shop" class="easyui-dialog" style="width:400px;height:280px;padding:10px 20px" closed="true" buttons="#dlg_shop-buttons"> <div class="ftitle">User Information</div> <form id="fm_shop" method="post" novalidate> <div class="fitem"> <label>Shop Name:</label> <input name="shopname" id="shopname" class="easyui-validatebox" required="true"> </div> <div class="fitem"> <label>Shop Location:</label> <input name="shoplocation" id="shoplocation" class="easyui-validatebox" required="true"> </div> <div class="fitem"> <label>Shop CId:</label> <input name="shopcid" class="easyui-validatebox" required="true"> </div> <div class="fitem"> <label>Goodslist:</label> <input name="goodsidlist" class="easyui-validatebox" required="true"> </div> <div class="fitem"> <label>Shop Image:</label> <input name="shopimage" class="easyui-validatebox" required="true"> </div> </form> </div> <div id="dlg_shop-buttons"> <a href="#" class="easyui-linkbutton" iconCls="icon-ok" onclick="saveShop()">Save</a> <a href="#" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg_shop').dialog('close')">Cancel</a> </div>
虽然代码拙劣,但是却付出了心血,如果有转载的童鞋,请附上转载信息
作者:Hunter_first