extjs登录及crud

没使用mvc之前的extjs4.2登录及extjs4.2的crud代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="/mbs1/js/ext/resources/css/ext-all.css" />
<script type="text/javascript" src="/mbs1/js/ext/bootstrap.js"></script>
<script type="text/javascript" src="/mbs1/js/ext/locale/ext-lang-zh_CN.js"></script>
<!--定义全局JS变量-->
<script type="text/javascript">var GLOBAL_ROOT_PATH="/mbs1";</script>
<style type="text/css">
	html,body{
	height: 100%;
	width: 100%;
	margin: 0px;
	padding: 0px;	
	}
</style>
</head>
<body>
<script type="text/javascript">
Ext.onReady(function(){
	
	var win;
	
	Ext.define('com.xxx.model.user', {
	    extend: 'Ext.data.Model',
		alias : 'model.user',	    
		idProperty:'userId',
	    fields: [
	        {name: 'userId',     type: 'int'},
	        {name: 'loginName',      type: 'string'},
	        {name: 'realName',    type: 'string'},
	        {name: 'email',   type: 'string'},
	        {name: 'phone', type: 'string'},
	        {name: 'status',    type: 'int'}
	    ]  
	});	
	

	Ext.define('com.xxx.store.user', {
	    alias:'store.user',
	    extend: 'Ext.data.Store',
	    model: 'com.xxx.model.user',
	    proxy: {
	        type: "ajax",
	        url: GLOBAL_ROOT_PATH+"/user/listbypage",
	        actionMethods : {
				create : "POST",
				read : "POST",
				update : "POST",
				destroy : "POST"
			},
			api: {
				read: GLOBAL_ROOT_PATH+"/user/listbypage",
				create: 'bookCreate.php',
				update: GLOBAL_ROOT_PATH+"/user/edit",
				destroy: 'bookDestroy.php'
				},			
	        reader: {
	            type: "json",
	            root: 'listData',
	            totalProperty: 'totalRecordCount'
	        }
	    },
	    pageSize: 3,
	    sorters: [{
	            property: 'user_id',
	            direction: 'ASC'
	        }],
	    autoLoad: false
	});

	store_object=new com.xxx.store.user();
	store_object.loadPage(1);
	
	var mypagingtoolbar=Ext.create('Ext.toolbar.Paging',{
			store: store_object,     
			dock: 'bottom',  
			displayMsg: '显示 {0} - {1} 条,共计 {2} 条',
			emptyMsg: "没有数据",
			afterPageText: "页  共{0}页",
			beforePageText: "第",
			displayInfo: true
	});
	
		Ext.create('Ext.grid.Panel', {
		    title: '用户信息浏览',
		    tbar : [ {  
                xtype : 'button',  
                text : '新增',  
                handler : function(){
                	var add_form=Ext.create('com.xxx.view.user.addform');
                        win = new Ext.Window({
                         layout:'border',
                         title:'新增数据',
                         modal:true,
                            width:400,
                            height:200,
                            closeAction:'destroy',
                            plain: true,
                            items:[add_form]
                    });
                    win.down('form').getForm().reset();
                    win.show(this);		                    
                }  
            }],		    
		    store: store_object,
		    columnLines : true, 
		    forceFit : true,
		    columns: [
		        {text: '用户id',  dataIndex:'userId'},
		        {text: '登录名称',  dataIndex:'loginName'},
		        {text: '真实姓名',  dataIndex:'realName'},
		        {
		            xtype:'actioncolumn',
		            width:60,
		            items: [{
		                icon: GLOBAL_ROOT_PATH+'/css/img/edit.png',  // Use a URL in the icon config
		                tooltip: 'Edit',
		                handler: function(grid, rowIndex, colIndex) {
		                    var rec = grid.getStore().getAt(rowIndex);
		                    var edit_form=Ext.create('com.shinowit.view.user.editform');
		                        win = new Ext.Window({
		                        	title:'数据编辑',
									layout:'border',
		                            width:400,
		                            height:200,
		                            closeAction:'destroy',
		                            modal:true,
		                            plain: true,
		                            items:[edit_form]
		                    });
		                    win.down('form').loadRecord(rec);
		                    win.show(this);
		                }
		            },{
		                icon:GLOBAL_ROOT_PATH+ '/css/img/delete.gif',
		                tooltip: 'Delete',
		                handler: function(grid, rowIndex, colIndex) {
		                    var rec = grid.getStore().getAt(rowIndex);
		                    Ext.MessageBox.confirm("提示","您确定要删除这些信息吗?",function(button,text){ 
		                    		if (button=='yes'){
		    		                    Ext.Ajax.request({
		    		                        url: GLOBAL_ROOT_PATH+'/user/del',
		    		                        params: {
		    		                            id: rec.get('userId')
		    		                        },
		    		                        success: function(response){
		    		                            var text = response.responseText;
		    		                            var jsonObj=eval("("+text+")");
		    		                            if (true==jsonObj.success){
		    		                            	  Ext.Msg.alert('成功', jsonObj.msg);
		    		                            	  Ext.getStore(store_object).reload();
		    		                            }else{
		    		                            	  Ext.Msg.alert('失败', jsonObj.msg);
		    		                            }
		    		                        }
		    		                    });
		                    		}
		                    		});		                    
		                }
		            }]
		        }
		    ],
		    width: '100%',
		    height:'100%',
		    dockedItems: [  
		    	mypagingtoolbar
		    ],
		    renderTo: Ext.getBody()
		});		
		
		
		 Ext.define('com.xxx.view.user.editform', {
			 extend:'Ext.form.FormPanel',
				bodyStyle:'padding-top:20px;padding-left:20px;',
		        defaultType:'textfield',
		        labelAlign:'right',
			    width:'auto',
		        height : 150,
		        frame : true,
				buttonAlign:'center', 
				defaults : {
		            allowBlank : false,
		            autowidth : true,
		            labelAlign:'right',
		            width : 399
		        },
		      items:[
		      {xtype: 'hiddenfield',name: 'userId', value: ''},
		      {fieldLabel:'登录名称',name:'loginName',height:20,blankText:'请输入登录名称'},
		      {fieldLabel:'真实姓名',name:'realName', height:20,blankText:'请输入真实姓名'}
		      ],
		      buttons:[
		      {xtype:'button',text:'重输',handler:function(){this.up("form").getForm().reset();}},
		      {xtype:'button',text:'保存',handler: function() {
		            var form = this.up('form').getForm();
		            if (form.isValid()) {
		            	 form.submit({
		 			        url:GLOBAL_ROOT_PATH+'/user/edit',
		 					waitTitle : '提示',//标题
		      				waitMsg : '正在提交数据请稍候...',//提示信息                	
		                     success: function(form, action) {
		                    	 if (true==action.result.success){
				                        Ext.Msg.alert('成功', action.result.msg);
				                        //var start=mypagingtoolbar.cursor;  //得到当前记录指针
				                        //var limit=mypagingtoolbar.pageSize; //得到每页要显示的记录数 
				                        //Ext.getStore(store_object).load({params:{start:start,limit:limit}});
				                        Ext.getStore(store_object).reload();
				                        win.close();                            //关闭编辑框
		                    	 }else{
				                        Ext.Msg.alert('错误', action.result.msg);
		                    	 }
		                     },
		                     failure: function(form, action) {
		                         Ext.Msg.alert('错误', action.result.msg);
		                     }
		                 });		            	
		            	
		            	//record =form.getRecord(),            //获取表单数据元素
		                //values = form.getValues();            //获取该表单值
		            	//record.set(values);                        //修改当前的值
			            //Ext.getStore(store_object).sync();
		            	//record.commit();
  			            //win.close();                            //关闭编辑框
		            }
		        }}
		      ]
		  });
		  
		  Ext.define('com.xxx.view.user.addform',{
			    extend:'Ext.form.FormPanel',
				bodyStyle:'padding-top:5px;padding-left:5px;',
		        defaultType:'textfield',
		        labelAlign:'right',
			    width:'auto',
		        height : 150,
		        width:390,
		        frame : true,
				buttonAlign:'center', 
				defaults : {
		            allowBlank : false,
		            autowidth : true,
		            labelAlign:'right',
		            width : 299
		        },
		      items:[
		      {xtype: 'hiddenfield',name: 'userId', value: ''},
		      {fieldLabel:'登录名称',name:'loginName',height:20,blankText:'请输入登录名称'},
		      {fieldLabel:'真实姓名',name:'realName', height:20,blankText:'请输入真实姓名'}
		      ],
		      buttons:[
		      {xtype:'button',text:'重输',handler:function(){this.up("form").getForm().reset();}},
		      {xtype:'button',text:'保存',handler: function() {
		            var form = this.up('form').getForm();
		            if (form.isValid()) {
		            	
		            	 form.submit({
		 			        url:GLOBAL_ROOT_PATH+'/user/add',
		 					waitTitle : '提示',//标题
		      				waitMsg : '正在提交数据请稍候...',//提示信息                	
		                     success: function(form, action) {
		                    	 if (true==action.result.success){
				                        Ext.Msg.alert('成功', action.result.msg);
				                        Ext.getStore(store_object).reload();
				                        win.close();                            //关闭编辑框
		                    	 }else{
				                        Ext.Msg.alert('错误', action.result.msg);
		                    	 }
		                     },
		                     failure: function(form, action) {
		                         Ext.Msg.alert('错误', action.result.msg);
		                     }
		                 });		            	
		            	
		            	//record =form.getRecord(),            //获取表单数据元素
		                //values = form.getValues();            //获取该表单值
		            	//record.set(values);                        //修改当前的值
			            //Ext.getStore(store_object).sync();
		            	//record.commit();
			            //win.close();                            //关闭编辑框
		            }
		        }}
		      ]
		  });
});
</script>
</body>
</html>

 

 

package com.xxx.web.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.xxx.dao.mapper.SysUserMapper;
import com.xxx.model.SysUser;
import com.xxx.model.SysUserCriteria;

@Controller
@RequestMapping(value="/user")
public class UserController {
	private static final Logger logger = Logger.getLogger(UserController.class);

	@Resource
	private SysUserMapper sys_user_dao;
	
	@RequestMapping(value="/listbypage")
	@ResponseBody
	public Map<String,Object> listByPage(@RequestParam("start") int start,@RequestParam("limit") int pageSize,@RequestParam("page") int pageIndex){
		Map<String,Object> result=new HashMap<String,Object>();
		
		SysUserCriteria ex=new SysUserCriteria();
		ex.setPageSize(pageSize);
		ex.setPageIndex(pageIndex);
		ex.setOrderByClause("user_id");
	
		
		List<SysUser> list_data=null;
		try {
			list_data=sys_user_dao.selectPage(ex);
			result.put("listData", list_data);
			if (logger.isDebugEnabled()){
				logger.debug("取得分页结果记录行数:"+list_data.size());
			}
		} catch (Exception e) {
			if (logger.isDebugEnabled()){
				logger.error(e.getMessage(), e);
			}
			result.put("success", false);
			result.put("msg", "保存失败!数据库操作异常!");
			result.put("totalRecordCount", 0);
			result.put("listData", list_data);
			return result;
		}
		
		 //取得满足查询条件的记录总数
		try {
			int record_count=sys_user_dao.countByExample(ex);
			result.put("totalRecordCount", record_count);
		} catch (Exception e) {
			result.put("totalRecordCount", 0);
			if (logger.isDebugEnabled()){
				logger.error(e.getMessage(), e);
			}
		}
		
		return result;
	}

	@RequestMapping(value="/add")
	@ResponseBody
	public Map<String,Object> add(SysUser user){
		Map<String,Object> result=new HashMap<String,Object>();
		
		int rec_changed=0;
		try {
			 rec_changed=sys_user_dao.insert(user);
		} catch (Exception e) {
			if (logger.isDebugEnabled()){
				logger.error(e.getMessage(), e);
			}
			result.put("success", false);
			result.put("msg", "保存失败!数据库操作异常!");
			return result;
		}
		if (rec_changed>0){
			result.put("success", true);
			result.put("msg", "保存成功!");
		}else{
			result.put("success", false);
			result.put("msg", "保存失败!");
		}
		return result;
	}
	
	
	@RequestMapping(value="/edit")
	@ResponseBody
	public Map<String,Object> edit(SysUser user){
		Map<String,Object> result=new HashMap<String,Object>();
		
		int rec_changed=0;
		try {
			 rec_changed=sys_user_dao.updateByPrimaryKey(user);
		} catch (Exception e) {
			if (logger.isDebugEnabled()){
				logger.error(e.getMessage(), e);
			}
			result.put("success", false);
			result.put("msg", "保存失败!数据库操作异常!");
			return result;
		}
		if (rec_changed>0){
			result.put("success", true);
			result.put("msg", "保存成功!");
		}else{
			result.put("success", false);
			result.put("msg", "保存失败!");
		}
		return result;
	}


	@RequestMapping(value="/del")
	@ResponseBody
	public Map<String,Object> del(@RequestParam("id") Integer userId){
		Map<String,Object> result=new HashMap<String,Object>();
		
		int rec_changed=0;
		try {
			 rec_changed=sys_user_dao.deleteByPrimaryKey(userId) ;
		} catch (Exception e) {
			if (logger.isDebugEnabled()){
				logger.error(e.getMessage(), e);
			}
			result.put("success", false);
			result.put("msg", "删除失败!数据库操作异常!");
			return result;
		}
		if (rec_changed>0){
			result.put("success", true);
			result.put("msg", "删除成功!");
		}else{
			result.put("success", false);
			result.put("msg", "删除失败!");
		}
		return result;
	}
	
}


 

以下为登录的extjs

 

Ext.onReady(function(){
 Ext.QuickTips.init();
 Ext.form.Field.prototype.msgTarget = 'side';
 //以下自定义一个vtype输入校验规则
 Ext.apply(Ext.form.field.VTypes, {
                  //使用正则表达式
                  validcode:function(value,field){
                    var regEx=/^\d{4}$/; //4位数字              
                    return regEx.test(value);               
                  },
                  validcodeText:"请输入正确的验证码",
                  validcodeMask:/[0-9-]/  //限制键盘的输入
 });
   
  var login_form=new Ext.create('Ext.form.FormPanel',{
		bodyStyle:'padding-top:20px;padding-left:20px;',
        defaultType:'textfield',
        labelAlign:'right',
	    width:'auto',
        height : 150,
        frame : true,
		buttonAlign:'center', 
		defaults : {
            allowBlank : false,
            autowidth : true,
            labelAlign:'right',
            width : 210,
            vtype:'alphanum' //缺省只能输入字母和数字
        },
      items:[
      {fieldLabel:'登录名称',id:'loginName',name:'loginName',height:20,blankText:'请输入登录名称'},
      {fieldLabel:'登录密码',id:'loginPass',name:'loginPass',inputType:'password', height:20,blankText:'请输入登录密码'},
      {fieldLabel:'校验码',id:'validCode',name:'validCode',vtype:'validcode', width : 180,height:20,blankText:'请输入校验码',minLength:4,maxLength:4,minLengthText:'校验码不能少于4个',maxLengthText:'校验码不能多于4个数字'}
      ],
      buttons:[
      {xtype:'button',text:'重输',handler:function(){this.up("form").getForm().reset();}},
      {xtype:'button',text:'登录',handler: function() {
            var form = this.up('form').getForm();
            if (form.isValid()) {
                form.submit({
			        url:GLOBAL_ROOT_PATH+'/login/checklogin',
					waitTitle : '提示',//标题
     				waitMsg : '正在提交数据请稍候...',//提示信息                	
                    success: function(form, action) {
                    	window.location.href=action.result.mainurl;
                       //Ext.Msg.alert('成功', action.result.msg);
                    },
                    failure: function(form, action) {
                        Ext.Msg.alert('错误', action.result.msg);
                    }
                });
            }
        }}
      ]
  });
  
  var login_window=new Ext.create('Ext.window.Window',{
		title:'用户登录',
	    width : 300,
	    collapsible:false,
	    closable:false,
	    resizable:false,
	    modal:true,
	    draggable:false,
	    shadow :true,
    items:[login_form]
  });
  login_window.show();
 //创建验证码
 Ext.core.DomHelper.insertAfter( Ext.get('validCode'),   {
               tag: 'img',
               id:'checkimg',
               name:'checkimg',
               src: GLOBAL_ROOT_PATH+'/html/validcode.jsp?id='+new Date().getTime(),  
               align: 'absbottom',
               style: 'position: absolute;left: 200px;top: 70px;'
   } );
   Ext.get('checkimg').on({
   	'click':{fn:function(){
       this.src=GLOBAL_ROOT_PATH+'/html/validcode.jsp?id='+new Date().getTime();
   }}});
});

 

由于lazarus中的例子: lazarus\fpc\2.6.0\source\packages\fcl-web\examples\webdata\demo 用的extjs是3.4版,在新的extjs4.2环境下不能运行,费了好大劲,终于搞定。期间到laz英文论坛提问,可能跟我英文差有关吧,一个回答的都没有。搞定后,版主又要我进行了“ open a new issue in the bugtracker and add a diff with the changes ”。本着互助、共享的原则,整个东西放到lazarus中文社区论坛,欢迎大家不断改善源码,提高性能,并且将改善后的源码进行共享。 我的环境:winxp,lazarus1.1,fpc2.6.0,apache2.2,extjs4.2。 不要犯怵,安装配置很简单,运行这个demo一行代码都不需要编写。后面我会详细讲安装运行方法。 安装配置: 1、安装Apache。下载地址:http://www.fayea.com/apache-mirror//httpd/binaries/win32/httpd-2.2.22-win32-x86-openssl-0.9.8t.msi 其他版本我没试过,高版本的应该可以。 我安装到了D:\apache2.2 2、下载安装Extjs4.2。下载地址:http://cdn.sencha.io/ext-4.2.0-beta.zip?ref=extjs.org.cn 下载后,解压缩,文件夹复制到 D:\apache2.2\htdocs\,然后改名为Ext。 3、下载附件。 原来的lazarus demo 源码未做任何修改,直接编译即可。编译之前需要安装weblaz和lazwebextra两个包。 本文附件中已经有extgrid.exe,可以直接使用。 将extgrid.exe和users.dbf复制到 apache2.2\cgi-bin 目录下。 将附件中其余文件复制到 apache2.2\htdocs\demodbf 目录下。 好了,全部配置完成。 4、启动Apache,访问:http://localhost/demodbf/extgrid-json.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值