• easyui前后端分离


    陈旧的开发模式

    美工(ui工程师:出一个项目模型)

    前端工程师做html页面

    java工程师:将原有的html转成jsp,动态展示数据

    前后端强依赖,后端必须要等前端的html做好才能套jsp。如果html发生变更,就更痛了,开发效率低


    前后端分离

    核心思想是前端html页面通过ajax调用后端的restuful api接口并使用json数据进行交互。

    前后端约定接口&数据&参数

    在开发前约定数据交互的格式。

    前后端并行开发(无强依赖,可前后端并行开发,如果需求变更,只要接口&参数不变,就不用两边都修改代码,开发效率高)

    美工:只管展示tree_data1.json

    案例(easyui)

    在同包的位置下创建一个js文件确定数据交互的格式,如下:

    {"total":28,"rows":[
        {"uid":"FI-SW-01","uname":"Koi","upwd":10.00,"status":"P","listprice":36.50,"attr1":"Large","itemid":"EST-1"},
        {"uid":"K9-DL-01","uname":"Dalmation","upwd":12.00,"status":"P","listprice":18.50,"attr1":"Spotted Adult Female","itemid":"EST-10"},
        {"uid":"RP-SN-01","uname":"Rattlesnake","upwd":12.00,"status":"P","listprice":38.50,"attr1":"Venomless","itemid":"EST-11"},
        {"uid":"RP-SN-01","uname":"Rattlesnake","upwd":12.00,"status":"P","listprice":26.50,"attr1":"Rattleless","itemid":"EST-12"},
        {"uid":"RP-LI-02","uname":"Iguana","upwd":12.00,"status":"P","listprice":35.50,"attr1":"Green Adult","itemid":"EST-13"},
        {"uid":"FL-DSH-01","uname":"Manx","upwd":12.00,"status":"P","listprice":158.50,"attr1":"Tailless","itemid":"EST-14"},
        {"uid":"FL-DSH-01","uname":"Manx","upwd":12.00,"status":"P","listprice":83.50,"attr1":"With tail","itemid":"EST-15"},
        {"uid":"FL-DLH-02","uname":"Persian","upwd":12.00,"status":"P","listprice":23.50,"attr1":"Adult Female","itemid":"EST-16"},
        {"uid":"FL-DLH-02","uname":"Persian","upwd":12.00,"status":"P","listprice":89.50,"attr1":"Adult Male","itemid":"EST-17"},
        {"uid":"AV-CB-01","uname":"Amazon Parrot","upwd":92.00,"status":"P","listprice":63.50,"attr1":"Adult Male","itemid":"EST-18"}
    ]}

    前端代码

    jsp页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>人员信息维护管理界面</title>
    
    <link rel="stylesheet" type="text/css"
        href="${pageContext.request.contextPath}/static/js/public/easyui5/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css"
        href="${pageContext.request.contextPath}/static/js/public/easyui5/themes/icon.css">
    <script type="text/javascript"
        src="${pageContext.request.contextPath}/static/js/public/easyui5/jquery.min.js"></script>
    <script type="text/javascript"
        src="${pageContext.request.contextPath}/static/js/public/easyui5/jquery.easyui.min.js"></script>
    <script type="text/javascript"
        src="${pageContext.request.contextPath}/static/js/userManage.js"></script>
    </head>
    <body>
    <!-- 展示的数据 -->
    <table id="dg"></table>
    <!-- 弹窗 -->
    <div id="dd" class="easyui-dialog" title="My Dialog" style="400px;height:200px;"   
            data-options="iconCls:'icon-save',resizable:true,modal:true,closed:true,buttons:'#bb'">   
        Dialog Content.  
        <!-- 提交的from表单 -->
    <form id="ff" method="post">  
        <input type="hidden" name="SerialNo"> 
        <!-- 
            easyui自带一些简单的正则表达式,
            也可以在easyui中自定义validType:xxx  这个xxx就代表一种正则
                $(function(validType){
                    
                })    
        -->
        <div>   
            <label for="name">uid:</label>   
            <input class="easyui-validatebox" type="text" name="uid" data-options="required:true" />   
        </div>   
        <div>   
            <label for="name">uname:</label>   
            <input class="easyui-validatebox" type="text" name="uname" data-options="required:true" />   
        </div> 
        <div>   
            <label for="name">upwd:</label>   
            <input class="easyui-validatebox" type="text" name="upwd" data-options="required:true" />   
        </div> 
    </form> 
    
    <div id="bb">
    <a href="#" class="easyui-linkbutton " onclick="ok()">保存</a>
    <a href="#" class="easyui-linkbutton" >关闭</a>
    </div>
    
    </body>
    </html>

    js代码:

    $(function(){
        $('#dg').datagrid({    
            url:$("#ctx").val()+'/userAction.action?methodName=list',  
            fitColumns:true,
            fit:true,
            pagination:true,
            columns:[[    
                {field:'uid',title:'用户ID',100},    
                {field:'uname',title:'名称',100},    
                {field:'upwd',title:'密码',100,align:'right'}    
            ]],
            toolbar: [{
                
                iconCls: 'icon-edit',
                handler: function(){
                    var row=$('#dg').datagrid('getSelected');
                    $("#zz").attr("data","edit");
                    if(row){
                        $('#ff').form('load',row);
                        $('#dd').dialog('open');
                    }
                }
            },'-',{
                iconCls: 'icon-add',
                handler: function(){
                    var row=$('#dg').datagrid('getSelected');
                    //修改方法名
                    $("#zz").attr("data","add");
                    //清空数据
                    $('#ff').form('clear');
                    //打开提示框
                    $('#dd').dialog('open');        
                }
            },'-',{
                //删除方法
                iconCls: 'icon-remove',
                handler: function(){
                    //获取选中的数据
                    var row=$('#dg').datagrid('getSelected');
                    $.ajax({
                        //请求地址与参数传递
                         url:$("#ctx").val()+'/userAction.action?methodName=remove&SerialNo='+row.SerialNo,
                         success: function(param){    
                                //重新载入页面
                                $('#dg').datagrid('reload');
                            
                            }    
                    })
                }
            }]
        
        }); 
        
    })
    
    /**
     * 搜索的方法
     * @returns
     */
    function qq(){
        //获取文本框的值
        var query=$("#qq").val();
        $("#dg").datagrid({
            url:$("#ctx").val()+'/userAction.action?methodName=query&uname='+query
        });
    }
    
    /**
     * 新增和修改方法
     * @returns
     */
    function ok(){
        //获取方法名
        var a=$("#zz").attr("data");
        $('#ff').form('submit', {       
            url:'../userAction.action?methodName='+a,    
            success: function(param){    
                $('#dd').dialog('close');
                $('#dg').datagrid('reload');
                $('#ff').form('clear'),
                $('#dd').dialog('close')
            }    
        }); 
    }

    后端

    dao方法:

    package com.dao;
    
    import java.sql.SQLException;
    import java.util.List;
    import java.util.Map;
    
    import com.util.JsonBaseDao;
    import com.util.JsonUtils;
    import com.util.PageBean;
    import com.util.StringUtils;
    
    public class UserDao extends JsonBaseDao {
        /**
         * 修改方法
         * @param paMap
         * @return
         * @throws NoSuchFieldException
         * @throws SecurityException
         * @throws IllegalArgumentException
         * @throws IllegalAccessException
         * @throws SQLException
         */
        public int edit(Map<String, String[]> paMap) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SQLException {
            String sql=" update t_easyui_user_version2 set uid=?,uname=?,upwd=? where serialno=?";    
            return super.executeUpdate(sql, new String[] {"uid","uname","upwd","SerialNo"}, paMap);
            
        }
        
        /**
         * 新增方法
         * @param paMap
         * @return
         * @throws Exception
         */
        public int add(Map<String, String[]> paMap)throws Exception  {
            String sql="insert into t_easyui_user_version2 (uid,uname,upwd) values (?,?,?)";
            return super.executeUpdate(sql, new String[] {"uid","uname","upwd"}, paMap);
            
        }
        
        /**
         * 删除方法
         * @param paMap
         * @return
         * @throws Exception
         */
        public int remove(Map<String, String[]> paMap)throws Exception {
            String sql="delete from t_easyui_user_version2 where SerialNo=?";
            return super.executeUpdate(sql, new String[] {"SerialNo"}, paMap);
            
        }
    
        
        /**
         * 查询的方法
         * @param paMap
         * @param pageBean
         * @return
         * @throws InstantiationException
         * @throws IllegalAccessException
         * @throws SQLException
         */
        public List<Map<String, Object>> query(Map<String, String[]> paMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
            String sql="select * from t_easyui_user_version2 where true";
            String uname = JsonUtils.getParamVal(paMap, "uname");
            if (StringUtils.isNotBlank(uname)) {
                sql = sql + " and uname  like '%" + uname + "%'";
            }
            return super.executeQuery(sql, pageBean);
            
        }
    }

    web层:

    package com.web;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dao.UserDao;
    import com.entity.TreeNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.util.PageBean;
    import com.util.ResponseUtil;
    import com.zking.framework.ActionSupport;
    
    public class UserAction extends ActionSupport {
    
        private UserDao userDao = new UserDao();
    
        /**
         * datagrid所需数据后端程序员开发完毕
         * @param req
         * @param resp
         * @return
         */
        public String list(HttpServletRequest req,HttpServletResponse resp){
            try {
                PageBean pageBean=new PageBean();
                pageBean.setRequest(req);
                List<Map<String, Object>> list = this.userDao.query(req.getParameterMap(), pageBean);
                ObjectMapper om=new ObjectMapper();
                //数据格式转换
                Map<String, Object> map=new HashMap<>();
                map.put("total", pageBean.getTotal());
                map.put("rows", list);
                ResponseUtil.write(resp, om.writeValueAsString(map));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            
            return null;
        }
        /**
         * 查询的请求方法
         * @param req
         * @param resp
         * @return
         */
        public String query(HttpServletRequest req,HttpServletResponse resp) {
            try {
                PageBean pageBean=new PageBean();
                pageBean.setRequest(req);
                List<Map<String, Object>> list = this.userDao.query(req.getParameterMap(), pageBean);
                ObjectMapper om=new ObjectMapper();
                Map<String, Object> map=new HashMap<>();
                map.put("total", pageBean.getTotal());
                map.put("rows", list);
                ResponseUtil.write(resp, om.writeValueAsString(map));
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            return "index";
            
        }
        
        
        /**
         * form组件提交所需数据后端程序员处理完毕
         * @param req
         * @param resp
         * @return
         */
        public String edit(HttpServletRequest req,HttpServletResponse resp){
            try {
                int edit = this.userDao.edit(req.getParameterMap());
                ObjectMapper om=new ObjectMapper();
                ResponseUtil.write(resp, om.writeValueAsString(edit));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            return null;
        }
        
        
        /**
         * 新增的请求方法
         * @param req
         * @param resp
         * @return
         */
         
         
        public String add(HttpServletRequest req,HttpServletResponse resp){
            try {
                int add = this.userDao.add(req.getParameterMap());
    
                System.out.println("ok");
                ObjectMapper om=new ObjectMapper();
                ResponseUtil.write(resp, om.writeValueAsString(add));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            return null;
        }
        
        /**
         * 删除的请求方法
         * @param req
         * @param resp
         * @return
         */
        public String remove(HttpServletRequest req,HttpServletResponse resp) {
            try {
                int remove=this.userDao.remove(req.getParameterMap());
                ObjectMapper om=new ObjectMapper();
                ResponseUtil.write(resp, om.writeValueAsString(remove));
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            return null;
            
        }
    }

    xml文件配置:

    <config>
        <action path="/menuAction" type="com.web.MenuAction">
        </action>
    
        <action path="/userAction" type="com.web.UserAction">
            <forward name="index" path="/index.jsp" redirect="false"></forward>
            <forward name="login" path="/login.jsp" redirect="false"></forward>
    
        </action>
    </config>

    效果如下:

     

  • 相关阅读:
    深入解析Mysql中事务的四大隔离级别及其所解决的读现象
    MySQL的B+Tree索引
    数据库中的乐观锁与悲观锁
    github 页面及功能介绍(转载)- 很建议看看
    python 修改文件的创建时间、修改时间、访问时间
    Go-常识补充-切片-map(类似字典)-字符串-指针-结构体
    Django-djangorestframework-渲染模块
    Django-djangorestframework-请求模块-获取请求参数
    Go-函数高级使用-条件分支-包管理-for循环-switch语句-数组及切片-与或非逻辑符
    Go-环境搭建-hello world-变量常量定义-函数使用基础
  • 原文地址:https://www.cnblogs.com/huxiaocong/p/11135587.html
Copyright © 2020-2023  润新知