SpringMVC+easyUI中datagrid修改数据实现_2014.5.6

一.概括

  springMVC集成hibernate4,hibernate来操控DAO层,spring来控制事务。具体如下:

二.实现

  1.controller

1     @RequestMapping("/mdfUser")
2     @ResponseBody
3     public void mdfUser(User u){
4         userManager.modifyUser(u);
5     }

  2.userManager,这里要注意一下,spring的aop性质,应该是在这里进入到事务控制的,我也不是很了解,主要是在UserManager 里面的这个方法,要起spring中配置的属性一样,才会开启事务,否则在控制台不会打出任何东西,也就不会执行任何事务。

1     public void modifyUser(User u) {
2         userDao.mdfUser(u);
3     }
1  <bean id="userManager" parent="transactionBase">
2          <property name="target" ref="userManagerBase"></property>
3  </bean>
 1 <bean id="transactionBase" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true">
 2         <property name="transactionManager" ref="transactionManager"></property>
 3         <property name="transactionAttributes">
 4             <props>
 5                 <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
 6                 <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
 7                 <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
 8                 <prop key="modify*">PROPAGATION_REQUIRED,-Exception</prop>
 9                 <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
10                 <prop key="get*">PROPAGATION_NEVER</prop>
11             </props>
12         </property>
13     </bean>

  3.userDao层,这里只需要saveOrUpdate即可,但是有一点不明白,为何,我在使用hql语句来更新数据没有任何反应。这里用到了hql语句的占位符,格式就是这样,这是对与hibernate版本4以上提出的,老版本的?不再适用!同样贴上代码:

1 public void mdfUser(User user) {
2         this.sessionFactory.getCurrentSession().saveOrUpdate(user);
3}
1         String hql = "update User u set u.userName =:name , u.age =:age where u.id=:id";
2         Query query = this.sessionFactory.getCurrentSession().createQuery(hql);
3         query.setParameter("name", user.getUserName());
4         query.setParameter("age", user.getAge());
5         query.setParameter("id", user.getId());

  4.前台js主要是通过修改和保存按钮来实现,这里主要有两个问题

    4.1  onAfterEdit事件,此事件的意思是,在编辑窗口完事以后触发,这就涉及到增加按钮与修改按钮的      功能区分,这里就要加一个标志位,根据标志位来判断是增加的触发还是修改时候的触发,因为他们      提交到后台的处理程序是完全不一样的。这里的标志位为addOrMdfFlag,

    4.2 保存按钮,我的保存按钮有两部分功能,一是在添加数据以后点击保存按钮,会关闭当前(第1行数据      的)编辑状态,二是在点击修改后,关闭当前行的状态,所以这里也用到了一个标志位,在增加处,      标志位flag固定为0(因为我是在行编辑模式下,‘0’代表第一行,也就是在第1行新增数据),在修改      处,我会通过getRowIndex来获取row的索引值,也就是能够表示当前位置的行数。

 1 $('#datagrid').datagrid({
 2         toolbar: [{
 3             text:'增加',
 4             iconCls: 'icon-add',
 5             handler: function(){
 6                 addOrMdfFlag = 0;
 7                 rowEdit = 0;
 8                 $('#datagrid').datagrid('insertRow',{
 9                     index : rowEdit ,
10                     row:{
11                         
12                     }
13                 });
14                 $('#datagrid').datagrid('beginEdit',rowEdit);
15                 console.info("rowEdit ="+ rowEdit +"*****"+"addOrMdfFlag = " +addOrMdfFlag);
16             }
17         },'-',{
18             text:'修改',
19             iconCls: 'icon-edit',
20             handler: function(){
21                 addOrMdfFlag = 1;
22                 var row = $('#datagrid').datagrid('getSelected');
23                 var index = $('#datagrid').datagrid('getRowIndex',row);
24                 rowEdit = index;        
25                 console.info("rowEdit ="+ rowEdit+"*****"+"addOrMdfFlag = " +addOrMdfFlag);
26                 $('#datagrid').datagrid('beginEdit',index);
27                 
28             }
29         },'-',{
30             text:'删除',
31             iconCls: 'icon-remove',
32             handler: function(){
33                 del();
34         }
35         },'-',{
36             text:'取消选中',
37             iconCls: 'icon-undo',
38             handler: function(){
39                 $('#datagrid').datagrid('clearSelections');
40                 $('#datagrid').datagrid('unselectAll');
41                 $('#datagrid').datagrid('endEdit',rowEdit);
42             }
43         },'-',{
44             text:'保存',
45             iconCls: 'icon-save',
46             handler: function(){
47                 console.info("rowEdit ="+ rowEdit);
48                 $('#datagrid').datagrid('endEdit',rowEdit);
49             }
50         }],
51         onAfterEdit : function (rowIndex, rowData, changes){
52             if(addOrMdfFlag = 0){
53                 console.info("addOrMdfFlag = "+addOrMdfFlag);
54                 $.ajax({
55                        type: "POST",
56                        url: "user/addUser",
57                        data: {
58                            "userName":rowData.userName,
59                               "age":rowData.age
60                        },
61                        success: function(msg){
62                          $('#datagrid').datagrid('load');
63                        }
64                     });
65             }
66             else if(addOrMdfFlag = 1){
67                 console.info("addOrMdfFlag = "+addOrMdfFlag);
68                 $.ajax({
69                        type: "POST",
70                        url: "user/mdfUser",
71                        data: {
72                            "id":rowData.id,
73                            "userName":rowData.userName,
74                               "age":rowData.age
75                        },
76                        success: function(msg){
77                          $('#datagrid').datagrid('load');
78                        }
79                     });
80             }
81             else {
82                 alert("出现错误,请于管理员联系");
83             }
84         }
85     });
86 });
原文地址:https://www.cnblogs.com/weizizhe/p/3711250.html