• struts2 easyui实现datagrid的crud


    近期两天由于项目须要,接触了easyui,要用它的datagrid实现crud。第一次做,花了一天时间才完毕全部功能,昨天做另外一个模块,相同的功能仅仅用了两个小时。 如今把第一次做datagrid时遇到的问题记录下来,帮助自己记忆。同一时候也帮助其它第一次接触easyui的朋友。



    问题

    json究竟有多少种?

    当时项目里json的jar包是我直接从别的项目里拷过来的。结果在以下的语句里报错
    resultObj = JSONObject.fromObject(json);
    也就是我的json包里JSONObject里没有forObject这种方法。


    那咋办?换jar包呗。
    我换成了
    json-lib-2.3-jdk15.jar
    然后更奇葩的问题出现了。程序到了那一步不动了。

    就是不运行了,停到那里了。


    网上说还是jar的问题,最后我增加了下面的几个包才解决这个问题。

    为什么会有两个common-lang?
    由于上面的问题须要的是common-lang2,而struts2.3.16须要的是common-lang3。


    代码

    好,我们如今看代码
    这是前台的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>Insert title here</title>
    
    <link rel="stylesheet" type="text/css" href="../../easyui/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="../../easyui/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="../../easyui/themes/color.css">
    <link rel="stylesheet" type="text/css" href="../../easyui/demo/demo.css">
    
    <script type="text/javascript" src="../../easyui/jquery.min.js"></script>
    <script type="text/javascript" src="../../easyui/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="userAdmin.js"></script>
    
    <style type="text/css">
    #fm {
        margin: 0;
        padding: 10px 30px;
    }
    
    .ftitle {
        font-size: 14px;
        font-weight: bold;
        padding: 5px 0;
        margin-bottom: 10px;
        border-bottom: 1px solid #ccc;
    }
    
    .fitem {
        margin-bottom: 5px;
    }
    
    .fitem label {
        display: inline-block;
         80px;
    }
    
    .fitem input {
         160px;
    }
    </style>
    </head>
    <body>
        <table id="tt" >  
    
        
          <thead>   
    
               <tr>    
    
                   <th field="userId" width="100" align="center">ID</th>    
                   <th field="passWord" width="100" align="center">password</th>    
                   <th field="userName" width="100" align="center">username</th>    
                   <th field="status" width="100" align="center">状态</th>    
                   <th field="role" width="100" align="center">级别</th>    
               </tr>    
    
           </thead>  
        
           
        </table>
           <div id="toolbar">
                <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newUser()">New User</a>
                <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editUser()">Edit User</a>
                <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true" onclick="destroyUser()">Remove User</a>
            </div>
            
        
      <div id="dlg" class="easyui-dialog" style="400px;height:280px;padding:10px 20px" closed="true" buttons="#dlg-buttons">
       <div class="ftitle">
        User Information
       </div>
       <form id="fm" method="post" novalidate="">
       
         <div class="fitem">
         <label>id</label>
         <input name="userId" class="easyui-textbox"  readonly="true" />
        </div>
        
        
        <div class="fitem">
         <label>username</label>
         <input name="userName" class="easyui-textbox" required="true" />
        </div>
        <div class="fitem">
         <label>password</label>
         <input name="passWord" class="easyui-textbox"  required="true" />
        </div>
        
            <div class="fitem">
         <label>状态</label>
                     <select name="status"  >
                        <option value="good" selected="selected" >正常</option>
                        <option value="locked">冻结</option>
                    </select>
        </div>
        
        <div class="fitem">
         <label>级别</label>
                     <select name="role"  >
                        <option value="一级管理员" selected="selected" >一级管理员</option>
                        <option value="二级管理员">二级管理员</option>
                        <option value="三级管理员">三级管理员</option>
                    </select>
        </div>
       </form>
      </div>
    <div id="dlg-buttons">
        <a href="javascript:void(0)" class="easyui-linkbutton c6" iconCls="icon-ok" onclick="saveUser()" style="90px">Save</a>
        <a href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')" style="90px">Cancel</a>
    </div>
    </body>
    </html>
    
    jsp里面引入了
    userAdmin.js
    

    好我们看看

      $(function(){  
            $('#tt').datagrid({    
                     title:'用户管理',    
                     iconCls:'icon-edit',//图标    
                      530,    
                     height: 300,    
                     nowrap: false,    
                     striped: true,    
                     border: true,    
                     toolbar:'#toolbar' , //你试试没有这行 看看什么效果
                   //  fit: true,//自己主动大小    
                     url:'userFindAll',    
                     //sortName: 'code',    
                     //sortOrder: 'desc',    
                     remoteSort:false,     
                     idField:'id',    
                     singleSelect:true,//是否单选    
                     rownumbers:true//行号    
                 });  
                
            });  
     
        
        var url;
        function newUser() {
            $('#dlg').dialog('open').dialog('setTitle', 'New User');
            $('#fm').form('clear');
            url='addUser';
           // $('#dlg').dialog('close')
        }
        function editUser() {
            var row = $('#tt').datagrid('getSelected');
            if (row) {
                $('#dlg').dialog('open').dialog('setTitle', 'Edit User');
                $('#fm').form('load', row);
                url = 'editUser';
            }
        }
        function saveUser() {
            $('#fm').form('submit', {
                url: url,
                onSubmit: function() {
                    return $(this).form('validate');
                },
                success: function(result) {
                    var result = eval('(' + result + ')');
                    if (result.errorMsg) {   //保存的时候 检查json里有没有errorMsg
                        $.messager.show({
                            title: 'Error',
                            msg: result.errorMsg
                        });
                    } else {
                        $('#dlg').dialog('close'); // close the dialog
                        $('#tt').datagrid('reload'); // reload the user data
                    }
                }
            });
        }
        function destroyUser() {
            var row = $('#tt').datagrid('getSelected');  //得到我选择的那一行
            if (row) {
                $.messager.confirm('Confirm', 'Are you sure you want to destroy this user?',
                function(r) {
                    if (r) {
                        $.post('deleteUser', {
                            id: row.userId         //这个userid就是 jsp里面的那个 field="userId"
                        },
                        function(result) {
                            if (result.success) {  //删除的时候 检查json里有没有success这个域
                                $('#tt').datagrid('reload'); // reload the user data
                            } else {
                                $.messager.show({ // show error message
                                    title: 'Error',
                                    msg: result.errorMsg
                                });
                            }
                        },
                        'json');
                    }
                });
            }
        } 

    我们看看struts.xml里面的配置

            <package name="user" namespace="/module/user" extends="json-default" >  
          
                    <action name="userFindAll" class="userAction" method="findAll">
                <result type="json">
                    <param name="root">resultObj</param>  
                </result>
            </action>
            </package>
    关键有两点 其一是resultObj 其二就是json-default
    好我们看看userAction
    package com.module.user;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.annotation.Resource;
    
    import net.sf.json.JSONObject;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    
    import com.core.BaseAction;
    import com.core.dao.UtilDAO;
    import com.core.model.User;
    
    
    @Component
    @Scope("prototype")
    public class UserAction extends BaseAction{
        
        /**
         *
         */
        private static final long serialVersionUID = -4070056523032278260L;
        
        private JSONObject resultObj ;
        
        private List<User> userList;
        
        private User user;
        
        private int userId;
        private String role;
        private String status;
        private String passWord;
        private String userName;
        
        private int id;
        
        @Resource
        private UtilDAO utilDAO;
        
        public String update(){
            user=getMyUser();
            utilDAO.update(user);
            Map<String, Object> json = new HashMap<String, Object>();   
               // json.put("errorMsg", "错误444");
           
                resultObj = JSONObject.fromObject(json);// 格式化result一定要是JSONObject  
    
                return SUCCESS;
        }
        public User getMyUser(){
            User user=new User();
            user.setPassWord(passWord);
            user.setRole(role);
            user.setStatus(status);
            user.setUserId(userId);
            user.setUserName(userName);
            return user;
        }
        @SuppressWarnings("unchecked")
        public String findAll(){
            userList=(List<User>) utilDAO.findAllList("User");
             ArrayList< Map<String, Object>> al = new ArrayList< Map<String, Object>>();
            for (User u:userList) {
                 Map<String, Object> m = new HashMap<String, Object>();
                 m.put("userId", u.getUserId());
                 m.put("userName", u.getUserName());
                 m.put("passWord", u.getPassWord());
                 m.put("status",u.getStatus());
                 m.put("role", u.getRole());
                 al.add(m);
            }
            Map<String, Object> json = new HashMap<String, Object>();   
            json.put("total", 88);//total键 存放总记录数,必须的
            json.put("page", 4);   //当前第四页
            json.put("rows", al);  // rows键 存放每页记录 list
        
            resultObj = JSONObject.fromObject(json);// 格式化result一定要是JSONObject  
            return SUCCESS;
        }
        
        public String add(){
            user=getMyUser();
            user.setStatus("good");
            utilDAO.save(user);
    
            Map<String, Object> json = new HashMap<String, Object>();   
            resultObj = JSONObject.fromObject(json);// 格式化result一定要是JSONObject  
    
            return SUCCESS;
        }
        
        @SuppressWarnings("unchecked")
        public String delete(){
            userList=(List<User>) utilDAO.findListByProperty("User","userId",id, "");
            user=userList.get(0);
            utilDAO.delete(user);
            Map<String, Object> json = new HashMap<String, Object>();   
            json.put("success", "success!!!");
            resultObj = JSONObject.fromObject(json);// 格式化result一定要是JSONObject  
            return SUCCESS;
        }
    }
    看到这里大家一定会想,getMyUser究竟是干什么的?
    还有
        private int userId;
        private String role;
        private String status;
        private String passWord;
        private String userName;
    这就是User那个类里面的參数。

    为什么要多写一遍呢?

    哎...学习struts的我们都知道 给user里的id传參数的时候 前端form里input的name写成user.id就OK。



    可问题就在这里呀。


    大家看js里面的destroyUser方法
    里面有一句
    id: row.userId
    row.userId 就是获得我选中的那一行的userId字段。
    你删除一个实体,总得知道这个实体的标识是吧。


        function editUser() {
            var row = $('#tt').datagrid('getSelected');
            if (row) {
                $('#dlg').dialog('open').dialog('setTitle', 'Edit User');
                $('#fm').form('load', row); //把row这一行的数据 传给edit窗体
                url = 'editUser';
            }
        }
    假设我edit窗体里面的input name为user.id。

    那么依据edit统一传递的特点,table的字段也得是user.id这样的形式。


    可是大家会想destory的时候,要获得选中的那一行的id
    怎么写?
    row.user.userId?

    所以 我仅仅能麻烦的採用单个传值的方法。 这也是我action里面有那么多參数的原因。

    最后看看总体的效果图




  • 相关阅读:
    S5pv210 android VGA 1440*900 视频播放/3D 演示效果实拍视频
    毕业3年,工资从5k到20k的经历——真的还是假的啊?
    转载.WinCE6.0 Camera驱动整体结构
    半夜来认识一下S5PV210 的VBPDE和VFPDE
    微软的windows 8授权真的要这么贵?谁要?!
    基于S5PC100的FIMC的部分解释——一篇让我理解透彻2440和S5PV210 摄像头camera控制器的文章
    转.Buffer Management by the Camera Driver (Windows Embedded CE 6.0)
    微软?想干掉苹果,自己做平板,还想做手机,有优秀的合作伙伴诺基亚?简直是笑话,难怪鲍ceo 被评为最应该下台的CEO了
    魅族经过M8——》M9——》MX 已经走向国际?
    wince6.0 S5pv210 之Sate210 VGA 镜像1440*900@60HZ/1280*1024@70HZ分辨率测试镜像(南嵌电子科技作品)
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6914145.html
Copyright © 2020-2023  润新知