`
afi
  • 浏览: 9896 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Ext之可能是用起来比较方便的增删改查Panel

阅读更多

本来是想早点回家把这个PANEL跟大家共享,结果由于某种原因导致.....
下面言归正传,上代码:
Ext.Afi.CrudPanel:

注:此Panel原创并非本人,其实很多地方要感谢EasyJF还有很多开源的朋友们,有了他们技术才会越来越牛(并非广告)


Ext.namespace('Ext.Afi');
Ext.Afi.CrudPanel = Ext.extend(Ext.Panel,{
    closable:true,
    autoScroll:true,
l   ayout:'fit',
    gridViewConfig:{},
    //链接
   linkRenderer:function(value) {
if(!value) {
return '';
}else {
return String.format("<a href='{0}' target='_blank'>{0}</a>");
}
},
//时间
dateRenderer:function(format) {
format = format || 'Y-m=d h:i';
return Ext.util.Format.dateRenderer(format);
},
initComponent:function() {
this.store = new Ext.data.JsonStore({
url:this.baseUrl + '?cmd=list',//子类中定义
fields:this.storeMapping,//子类中定义
root:'root',
totalProperty:'totalCount',
remoteSort:true
});

this.bottombar = new Ext.PagingToolbar({
pageSize:10,
store:this.store,
displayInfo:true
});
Ext.Afi.CrudPanel.superclass.initComponent.call(this);
var viewConfig = Ext.apply({forceFit:true},this.gridViewConfig);

this.gridPanel = new Ext.grid.GridPanel({
store:this.store,
cm:this.cm,//需在子类定义
sm:this.sm,
loadMask:true,
viewConfig:viewConfig,
tbar:this.createToolbar()/*[{
text:'添加',
iconCls:'add',
handler:this.create.createDelegate(this)
},{
text:'修改',
iconCls:'edit',
handler:this.edit.createDelegate(this)
},{
text:'删除',
iconCls:'del',
handler:this.del.createDelegate(this)
},{
text:'刷新',
iconCls:'refresh',
handler:this.refresh.createDelegate(this)
}]*/,
bbar:this.bottombar
});
this.gridPanel.on('rowdblclick',this.edit,this);
this.add(this.gridPanel);
this.store.load({params:{start:0,limit:this.bottombar.pageSize}});
},
//添加窗口
create:function() {
this.showWin('add');
this.reset();
},
edit:function() {
if(this.selectOne()) {
var selectRecord = this.gridPanel.getSelectionModel().getSelected();
this.showWin('update');
this.formPanel.getForm().loadRecord(selectRecord);
}
},
del:function() {
if(this.selectMany()) {
Ext.Msg.confirm('提示','确定要删除吗?',function(btn) {
if(btn == 'yes') {
var selections = this.gridPanel.getSelectionModel().getSelections();
var ids = new Array();
for(var i=0,len=selections.length; i<len; i++) {
try{
ids[i] = selections[i].get(this.id + '.id');
alert(ids[i]);
} catch(e) {}
}
this.body.mask('操作进行中,请稍候...','x-mask-loading');
Ext.Ajax.request({
url:this.baseUrl + '?cmd=remove&ids=' + ids,
success:function() {
this.body.unmask();
Ext.Msg.alert('恭喜','操作成功');
this.refresh();
},
failure:function() {
this.body.unmask();
Ext.Msg.alert('提示','操作失败');
},
scope:this
});
}
}.createDelegate(this));
}
},
refresh:function() {
this.store.removeAll();
this.store.reload();
},
//显示窗口
showWin:function(value) {
if(!this.win) {
if(!this.formPanel) {
this.formPanel = this.createForm();
}
this.win = this.createWin();
if(value='add') {
this.win.setTitle('添加','add')
} else if(value='update') {
this.win.setTitle('修改','edit')
}
}
this.win.show();
},
initWin:function(width,height) {
var win = new Ext.Window({
width:width,
height:height,
modal:true,
shadow:true,
resizable:false,
collapsible:true,
closeAction:'hide',
closable:true,
plain:true,
buttonAlign:'center',
bodyStyle:'padding:10px 0 0 15px',
items:[this.formPanel],
buttons:[{
text:'确定',
iconCls:'add',
handler:this.submitForm.createDelegate(this)
},{
text:'重置',
iconCls:'edit',
handler:this.reset,
scope:this
},{
text:'取消',
iconCls:'del',
handler:this.closeWin,
scope:this
}]
});
return win
},
submitForm:function() {
var id = this.formPanel.getForm().findField(this.id + '.id').getValue();
var url = null;
if(id == '') {
url = this.baseUrl + '?cmd=save'
} else {
url = this.baseUrl + '?cmd=update'
}
if(this.formPanel.getForm().isValid()) {
this.formPanel.getForm().submit({
waitTitle:'提示',
waitMsg:'数据提交中,请稍候......',
url:url,
method:'POST',
success:function() {
this.closeWin();
},
failure:function() {
Ext.Msg.alert('错误提示','信息操作失败');
},
scope:this
});
}
},
reset:function() {
if(this.win) {
this.formPanel.getForm().reset();
}
},
closeWin:function() {
if(this.win) {
this.win.hide();
}
this.win = null;
this.formPanel = null;
this.refresh();
},
selectOne:function() {
var selections = this.gridPanel.getSelectionModel().getSelections();
if(selections.length == 0) {
Ext.Msg.alert('提示','请选择一条数据');
return false;
} else if(selections.length != 1) {
Ext.Msg.alert('提示','不能选择多条数据');
return false;
}
return true;
},
selectMany:function() {
var selections = this.gridPanel.getSelectionModel().getSelections();
if(selections.length == 0) {
Ext.Msg.alert('提示','至少选择一条数据');
return false;
}
return true;
}
});

UserManagePanel:
注意我的继承是可以对gridPanel的按钮进行添加的,也就是可以在CrudPanel之上很轻松的加上其他的扩展功能,可能是比较方便的,但是还没有经过充分认证
UserManagePanel = Ext.extend(Ext.Afi.CrudPanel,{
id:'user',
baseUrl:'yonghu',
title:'用户管理',
iconCls:'tabs',
storeMapping:[
{name:'user.id',mapping:'id'},
{name:'user.realName',mapping:'realName'},
{name:'user.age',mapping:'age'}
],
createForm:function() {
var formPanel = new Ext.form.FormPanel({
baseCls:'x-plain',
labelWidth:65,
defaults:{
xtype:'textfield',
allowBlank:false,
anchor:'95%'
},
items:[{
xtype:'hidden',
fieldLabel:'用户编号',
name:'user.id'
},{
fieldLabel:'<font color=red>真实姓名</font>',
name:'user.realName'
},{
fieldLabel:'<font color=red>年龄</font>',
name:'user.age'
}]
});
return formPanel;
},
createWin:function() {
return this.initWin(300,150);
},
createToolbar:function() {
var tbar = new Ext.Toolbar([{
text:'添加',
iconCls:'add',
handler:this.create.createDelegate(this)
},{
text:'修改',
iconCls:'edit',
handler:this.edit.createDelegate(this)
},{
text:'删除',
iconCls:'del',
handler:this.del.createDelegate(this)
},{
text:'刷新',
iconCls:'refresh',
handler:this.refresh.createDelegate(this)
}]);
return tbar;
},
constructor:function() {
this.sm = new Ext.grid.CheckboxSelectionModel();
this.cm = new Ext.grid.ColumnModel([
new Ext.grid.RowNumberer(),
this.sm,
{header:'用户编号',dataIndex:'user.id'},
{header:'真实名称',dataIndex:'user.realName'},
{header:'年龄',dataIndex:'user.age'}
]);
UserManagePanel.superclass.constructor.call(this);
}
});

 

struts.xml

 

<action name="yonghu" class="userAction" method="userCommand">
   <result name="list" type="json">
    <param name="root">page</param>
    <param name="excludeProperties">start,limit,conditions</param>
   </result>
   <result name="save" type="json">
    <param name="includeProperties">success</param>
   </result>
   <result name="update" type="json">
    <param name="includeProperties">success</param>
   </result>
   <result name="remove" type="json">
    <param name="includeProperties">success</param>
   </result>
  </action>

 

 userAction

到这里你应该看明白一些东西了,但是可能比较精妙的地方在于我的action中很少有用request.getParameter去获取实体的参数比如user 的id,realName,age等,如果你熟悉struts2这个地方是我根据struts2的OGNL表达式来操作的,你需要自己看我的CrudPanel 种有个id属性,根据不同的实体写不同实体的实力名称就可以

package com.smdc.personnel.action;

import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.smdc.personnel.domain.User;
import com.smdc.personnel.service.IUserService;
import com.smdc.personnel.vo.Page;

@SuppressWarnings("serial")
public class UserAction extends ActionSupport {

 private IUserService userService;
 private Page page;
 private User user;
 private boolean success;
 
 public String userCommand() {
  String cmd = ServletActionContext.getRequest().getParameter("cmd");
  
  if("list".equals(cmd)) {
   int start = Integer.parseInt(ServletActionContext.getRequest().getParameter("start"));
   int limit = Integer.parseInt(ServletActionContext.getRequest().getParameter("limit"));
   getUserByPage(start,limit);
  } else if("save".equals(cmd)) {
   addUser();
  } else if("update".equals(cmd)) {
   updateUser();
  } else if("remove".equals(cmd)) {
   String ids = ServletActionContext.getRequest().getParameter("ids");
   deleterUser(ids);
  }
  return cmd;
 }

 private void deleterUser(String ids) {
  String[] idsArray = ids.split(",");
  try {
   for(int i=0;  i<idsArray.length; i++) {
    int id = Integer.parseInt(idsArray[i]);
    System.out.println(id);
    user = userService.findUserById(id);
    userService.delUser(user);
   }
   success = true;
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 private void updateUser() {
  try {
   userService.updateUser(user);
   success = true;
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 private void addUser() {
  try {
   userService.addUser(user);
   success = true;
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 private void getUserByPage(int start, int limit) {
  page = new Page();
  page.setStart(start);
  page.setLimit(limit);
  try {
   List<User> root = userService.findUserByPage(page);
   int totalCount = userService.getUserTotalCount(page);
   page.setRoot(root);
   page.setTotalCount(totalCount);
   page.setSuccess(true);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public IUserService getUserService() {
  return userService;
 }

 public void setUserService(IUserService userService) {
  this.userService = userService;
 }

 public Page getPage() {
  return page;
 }

 public void setPage(Page page) {
  this.page = page;
 }

 public User getUser() {
  return user;
 }

 public void setUser(User user) {
  this.user = user;
 }

 public boolean isSuccess() {
  return success;
 }

 public void setSuccess(boolean success) {
  this.success = success;
 }

}

 

以上便是我的一些愚蠢之见,可能里面有很多思想上的错误,希望真正的高手指点,同时也感谢脚本娃娃,大漠老师等一群高手的指点(并非广告)。

如果您觉得我这是一派胡言,或者我是个傻逼,或者觉得有什么地方需要讨论的都可以给我发邮件:java_afi@163.com.也可以给我留言,恩先这样了,太晚了,哎

分享到:
评论
2 楼 afi 2010-12-26  
由于公司加班,有机会我会共享出来的,或许过一点时间会更新一个牛叉的项目也不一定大家拭目以待吧
1 楼 z赵杰 2010-12-21  
     能不能上几张图啊、  这样更清晰

相关推荐

    EXT 增删改查的一个例子

    EXT的表格组件(Ext.grid.Panel)支持行级别的编辑,结合行选择器和表单组件,可以方便地实现增删改查操作。表单组件(Ext.form.Panel)用于收集用户输入,并能与数据模型关联,实现数据的双向绑定。 在这个例子中...

    Ext左树有表格 增删改查

    在"Ext左树有表格 增删改查"这个主题中,我们主要关注的是ExtJS如何实现左侧树形结构与右侧表格的交互,以及在这样的布局中进行数据的增、删、改、查操作。 首先,ExtJS中的树形组件(TreePanel)可以用来展示层级...

    ext简单的增删改查

    在这个"EXT简单的增删改查"项目中,开发者利用EXTJS与SQLServer数据库相结合,实现了基本的数据管理功能,包括添加(Add)、删除(Delete)、修改(Update)和查询(Query)。 1. EXTJS的基本概念: - 组件...

    extJs 简单的增删改查

    在“简单的增删改查”这个主题中,我们将探讨如何使用ExtJS实现数据管理的基本操作,包括添加(Add)、删除(Delete)、修改(Update)和查询(Query)。 首先,我们需要了解ExtJS的核心概念,如组件(Components)...

    EXTJS4+STRUTS2+JAVA增删改查

    在这个"EXTJS4+STRUTS2+JAVA增删改查"的例子中,我们将深入探讨这三个技术如何协同工作,实现数据的动态管理。 EXTJS4是一个强大的JavaScript库,主要用于创建桌面级的Web应用程序。它提供了丰富的组件库,如表格、...

    Ext增删改查

    在“Ext增删改查”这个主题中,我们将深入探讨如何使用ExtJS进行数据操作,包括添加(Add)、删除(Delete)、修改(Update)和查询(Query)数据。 1. **Ext.data.Model**: 这是ExtJS中的核心类,代表了数据模型。...

    Ext表格中增删改查实例

    在"增删改查"实例中,我们将利用`Ext.grid.Panel`的配置项和事件来实现对表格数据的操作。 1. **创建表格(Create)** 创建数据通常涉及到在表格中添加新行。在Ext JS中,我们可以使用`store`对象的`add()`方法来...

    ext增删查改demo

    在这个"ext增删查改demo"中,我们可以看到是EXTJS在数据管理方面的应用,涉及到的主要知识点包括EXTJS的基础组件、数据模型、数据存储以及数据绑定。 1. EXTJS版本:此示例提及了EXTJS 3.1和2.2两个版本。EXTJS 3.x...

    ExtJs的增删改查功能

    ExtJs 提供了多种组件用于实现增删改查的交互,如`Ext.form.Panel`用于创建表单,`Ext.grid.Panel`用于显示和编辑表格数据,以及`Ext.toolbar.Toolbar`用于添加操作按钮如“新增”、“编辑”、“删除”。...

    Ext增删改查和excel导出

    在"Ext增删改查和excel导出"这个主题中,我们将探讨如何在ExtJS应用中实现数据的CRUD操作(创建、读取、更新、删除)以及如何将数据导出为Excel格式。 1. 创建(Create) 在ExtJS中,可以使用GridPanel或FormPanel...

    用Extjs做的一个小项目,实现了增删改查

    在"用Extjs做的一个小项目,实现了增删改查"这个项目中,我们可以深入探讨一下ExtJS在实现CRUD(创建Create、读取Read、更新Update、删除Delete)操作中的关键知识点。 1. **组件和布局** - **Grid Panel**:在...

    extjs完成用户增删改查

    在"extjs完成用户增删改查"这个场景中,我们主要关注的是如何利用ExtJS 4.0实现数据管理的基本功能,包括添加(Add)、删除(Delete)、修改(Edit)和查询(Query)用户信息。下面将详细介绍这些知识点: 1. **...

    extjs 增删改查

    在这个“extjs 增删改查”的主题中,我们将深入探讨如何利用ExtJS框架、JSON数据格式以及JDBC(Java Database Connectivity)来实现数据的增删改查功能,并带有分页显示。 首先,让我们了解ExtJS中的基础组件。`Ext...

    Ext 操作数据库,对数据的增删改查,包括数据库,Ajax请求和store请求的设置

    首先,让我们深入了解一下Ext中的"增删改查"(CRUD)操作。CRUD代表创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete),这是任何数据库应用的基础。在Ext中,我们通常会使用Store组件来处理这些操作。Store...

    Extjs增删改查示例

    总结起来,"Extjs增删改查示例"是一个典型的Web应用开发实践,它涵盖了ExtJS的核心组件和MVC设计模式的应用,以及与MySQL数据库的交互。初学者可以通过这个示例了解如何组织代码,实现数据的增删改查,为后续更复杂...

    EXT小例子包括(增,删,改,查)

    它支持各种字段类型,如文本框、下拉列表、复选框等,并且可以配合Data Model和Store进行数据绑定,实现增删改查的功能。 在EXT JS中,CRUD操作通常通过以下步骤实现: - 创建Data Model定义数据结构。 - 创建Store...

    Ext+ssh+sybase增删改

    在EXTJS应用中,增删改查操作通常与Ajax请求相结合,通过EXTJS的AJAX组件或者Store对象的`load()`、`sync()`方法与服务器进行异步通信。服务器端(如PHP、Java或Node.js)接收到请求后,通过SSH连接到Sybase数据库,...

    extjs实现增删查改

    在“extjs实现增删查改”这个主题中,我们将探讨如何使用ExtJS来实现基本的数据操作功能。 首先,增删查改(CRUD,Create, Read, Update, Delete)是任何数据管理应用的核心功能。在ExtJS中,我们可以利用Grid ...

    使用extjs4+servlet对extjs中grid数据进行填并实现增删改查等功能!

    本文将详细介绍如何利用ExtJS4和Servlet来实现Grid组件的数据填充,并集成增删改查(CRUD)功能。 首先,ExtJS4是一个强大的JavaScript框架,它提供了丰富的组件库,包括Grid组件,用于展示和操作表格数据。Grid...

    ExtJs常用到的增,删,改,查操作

    总的来说,ExtJs提供了丰富的组件和API,使得开发者能够方便地实现数据的增删改查功能。通过构建表单、定义数据模型、创建数据存储以及处理与服务器的交互,开发者可以构建出高效且用户体验良好的Web应用。

Global site tag (gtag.js) - Google Analytics