近期两天由于项目须要,接触了easyui,要用它的datagrid实现crud。第一次做,花了一天时间才完毕全部功能,昨天做另外一个模块,相同的功能仅仅用了两个小时。 如今把第一次做datagrid时遇到的问题记录下来,帮助自己记忆。同一时候也帮助其它第一次接触easyui的朋友。
为什么会有两个common-lang? 由于上面的问题须要的是common-lang2,而struts2.3.16须要的是common-lang3。
jsp里面引入了
问题
json究竟有多少种?
当时项目里json的jar包是我直接从别的项目里拷过来的。结果在以下的语句里报错resultObj = JSONObject.fromObject(json);也就是我的json包里JSONObject里没有forObject这种方法。 那咋办?换jar包呗。 我换成了 json-lib-2.3-jdk15.jar 然后更奇葩的问题出现了。程序到了那一步不动了。
就是不运行了,停到那里了。
网上说还是jar的问题,最后我增加了下面的几个包才解决这个问题。代码
好,我们如今看代码 这是前台的jsp代码<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here
ID | password | username | 状态 | 级别 |
---|
User Information
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 其二就是json-default 好我们看看userActionresultObj
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看到这里大家一定会想,getMyUser究竟是干什么的? 还有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; }}
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里面有那么多參数的原因。
最后看看总体的效果图