博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2 easyui实现datagrid的crud
阅读量:7164 次
发布时间:2019-06-29

本文共 8011 字,大约阅读时间需要 26 分钟。

近期两天由于项目须要,接触了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"%>
Insert title here
ID password username 状态 级别
User Information
jsp里面引入了
userAdmin.js

好我们看看

$(function(){          $('#tt').datagrid({                     title:'用户管理',                     iconCls:'icon-edit',//图标                     width: 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里面的配置

resultObj
关键有两点 其一是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
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
json = new HashMap
(); // 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
) utilDAO.findAllList("User"); ArrayList< Map
> al = new ArrayList< Map
>(); for (User u:userList) { Map
m = new HashMap
(); 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
json = new HashMap
(); 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
json = new HashMap
(); resultObj = JSONObject.fromObject(json);// 格式化result一定要是JSONObject return SUCCESS; } @SuppressWarnings("unchecked") public String delete(){ userList=(List
) utilDAO.findListByProperty("User","userId",id, ""); user=userList.get(0); utilDAO.delete(user); Map
json = new HashMap
(); 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里面有那么多參数的原因。

最后看看总体的效果图

你可能感兴趣的文章