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 });
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· dotnet 源代码生成器分析器入门
· 官方的 MCP C# SDK:csharp-sdk
· 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
· 一步一步教你部署ktransformers,大内存单显卡用上Deepseek-R1
· 一次Java后端服务间歇性响应慢的问题排查记录