• 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 });
  • 相关阅读:
    c函数调用过程
    查找匹配行及前后5行
    指向类成员函数的指针
    C++箴言:理解typename的两个含义
    不定参数
    定时器
    unix编译
    sed
    大脑皮层的梦工厂
    静态链接库顺序问题
  • 原文地址:https://www.cnblogs.com/weizizhe/p/3711250.html
Copyright © 2020-2023  润新知