zoukankan      html  css  js  c++  java
  • 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 });
  • 相关阅读:
    PAT顶级 1024 Currency Exchange Centers (35分)(最小生成树)
    Codeforces 1282B2 K for the Price of One (Hard Version)
    1023 Have Fun with Numbers (20)
    1005 Spell It Right (20)
    1092 To Buy or Not to Buy (20)
    1118 Birds in Forest (25)
    1130 Infix Expression (25)
    1085 Perfect Sequence (25)
    1109 Group Photo (25)
    1073 Scientific Notation (20)
  • 原文地址:https://www.cnblogs.com/weizizhe/p/3711250.html
Copyright © 2011-2022 走看看