<img style="max-width:90%" alt="" src="http://files.jb51.net/upload/20090701224007281.jpg" style="max-width:90%" border="0"><img style="max-width:90%" alt="" src="http://files.jb51.net/upload/20090701224007513.jpg" style="max-width:90%" border="0"> <br><br><br><img style="max-width:90%" alt="" src="http://files.jb51.net/upload/20090701224007259.jpg" style="max-width:90%" border="0"><br><br>소스 코드 일부: <br><div class="codetitle"> <span><a style="CURSOR: pointer" data="36251" class="copybut" id="copybut36251" onclick="doCopy('code36251')"><u>코드 복사</u> </a> </span> 코드는 다음과 같습니다. </div> <div class="codebody" id="code36251"> <br><%@ page 언어="java" pageEncoding="GBK"%> <br><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <br><c:set var="ctx" value="${pageContext.request.contextPath}"/> <br><html> <br><머리> <br><title>사용户管理首页</title> <br><link rel="stylesheet" type="text/css" href="js/ext-2.2/resources/css/ext-all.css" /> <br><script type="text/javascript" src="js/ext-2.2/adapter/ext/ext-base.js"></script> <br><script type="text/javascript" src="js/ext-2.2/ext-all.js"></script> <br><style type="text/css"> <br>.x-panel-body p {}{ <br>여백:5px; <br>} <br>.x-column-layout-ct .x-panel {}{ <br>margin-bottom:5px; <br>} <br>.x-column-layout-ct .x-panel-dd-spacer {}{ <br>margin-bottom:5px; <br>} <br>.settings {}{ <br> background-image:url(js/ext-2.2/shared/icons/fam/folder_wrench.png) !important; <br>} <br>.nav {}{ <br> background-image:url(js/ext-2.2/shared/icons/fam/folder_go.png) !중요; <br>} <br><br>.icon-grid {}{ <br>배경 이미지: url(js/ext-2.2/shared/icons/fam/grid.png) !important; <br>} <br><br>#button-grid .x-panel-body {}{ <br>테두리: 1px 솔리드 #99bbe8; <br>국경 상단: 0 없음; <br>} <br><br>.add {}{ <br>배경 이미지: url(js/ext-2.2/shared/icons/fam/add.gif) !important; <br>} <br><br>.option {}{ <br>배경 이미지: url(js/ext-2.2/shared/icons/fam/plugin.gif) !important <br><br>} <br><br>.remove {}{ <br>배경 이미지: url(js/ext-2.2/shared/icons/fam/delete.gif) !중요 <br><br>} <br><br> .save {}{ <br>배경 이미지: url(js/ext-2.2/shared/icons/save.gif) !important; <br>} <br></style> <br><스크립트> <br><!-- <BR>Ext.onReady(function() <BR>{ <BR>/**//**그리드 관련**/ <BR>Ext.QuickTips.init(); <BR>Ext.form .Field.prototype.msgTarget='side'; <BR>var newFormWin; //form窗口容器 <BR>var form1; //添加用户的form <BR> //修改用户的form <br> <br>//侧边栏状态的记录 <BR>Ext.state.SessionProvider = Ext.extend(Ext.state.CookieProvider, { <BR>readCookies : function(){ <BR>if(this.state){ <BR>for(var k in this.state){ <BR>if(typeof this.state[k] == 'string'){ <BR>this.state[k] = this.decodeValue(this.state[ k]); <BR>} <BR>} <BR>return Ext.apply(this.state || {}, Ext.state.SessionProvider.superclass.readCookies.call(this)); >} <BR>}); <BR><BR>var xg = Ext.grid; <br><br>var jsonReader = new Ext.data.JsonReader( { <br>root : 'list', //返回的数据集合 <br>totalProperty : 'totalCount', //总记录数 <BR>successProperty : '@success' //成功标记 <BR>}, [ { <BR>name : 'id', //grid中的dataIndex <BR>mapping : 'id', //返回的数据中的字段name <BR>type : 'int' //类型,默认为string类型 <BR>}, { <BR>name : 'username' , <BR>mapping : 'username' <BR>}, { <BR>name : 'age', <BR>mapping : 'age', <BR>type : 'int' <BR>}, <BR>{ <BR>이름 : 'ramark', <BR>mapping : 'remark' <BR>}]); <BR><BR>// Store <br>var ds = new Ext.data.Store( { <br>proxy : new Ext.data.HttpProxy( { <BR>url : '${ctx}/UserServlet?method =getAll' <BR>}), <BR>reader : jsonReader <BR>}); <BR>ds.setDefaultSort('id', 'asc'); <BR><BR><br>/**//** <br>***CRUD 그리드 <BR>****/ <BR><BR>//맞춤형 checkbox列选择 <br>var sm = new xg.CheckboxSelectionModel({ <br>리스너: //添加监听器 <BR>{ <BR>//行选择事件 <BR>rowselect : function (sm, rowIndex, keep, rec) //行选中事件 <BR>{ <BR>//得到ext组件用Ext. getCmp('id') <BR>var btn = Ext.getCmp('tbar1'); <BR>//选择数weight大于2,禁用修改按钮 <BR>if(sm.getCount() != 1) <BR>{ <BR>btn.disable(); <BR>} <BR>else <BR>{ <BR>btn.enable() <BR>} <BR>//取消选择事件 <BR>rowdeselect : 함수(sm, rowIndex, keep, rec) //行选中事件 <BR>{ <BR>//得到ext组件用Ext.getCmp('id') <BR>var btn = Ext.getCmp( 'tbar1') <BR>//数용량等于1启动修改按钮 <BR>if(sm.getCount() == 1) <BR>{ <BR>btn.enable() <BR> else <BR>{ <BR>btn.disable(); <BR>} <BR>} <BR>} <BR><BR><BR>}); <BR><br>//初始化Grid <br>var Grid = new xg.GridPanel({ <BR>id:'user-grid', <br>width:780, <br>height:450, <BR> 프레임:true, <BR>제목:'简易사용户管리', <BR>iconCls:'icon-grid', <BR>hidden: true, <BR>store: ds, //数据仓库 <BR>renderTo: 문서 .body, <BR>//列 <BR>cm: new xg.ColumnModel([ <BR>sm, <BR>{id:'id',header: "索引", width: 40, sortable: true, dataIndex : 'id'}, <BR>{header: "용용명", width: 20, sortable: true, dataIndex: 'username'}, <BR>{header: "年龄", width: 20, sortable: true, dataIndex: 'age'}, <BR>{header: "备注", width: 20, sortable: true, dataIndex: 'remark'} <BR>]), <BR><BR>sm: sm, <BR> <BR>viewConfig: { <br>forceFit:true <br>}, <br>//分页工具栏 <br>bbar : new Ext.PagingToolbar({ <BR>pageSize : 10, <BR>store : ds, <BR>displayInfo : true, <BR>displayMsg : '显示 {0}-{1}条 / 共 {2} 条', <BR>emptyMsg : "无数据。" <BR>}), <br><br> // 내장 도구 모음(버튼) <BR>tbar:[{ <BR>text:'Add', <BR>tooltip:'새 데이터 행 추가 ', <BR>iconCls:'add', <BR>핸들러: function() <BR>{ <BR>add() <BR>} <BR>}, '-', { <BR>text:' 수정', <BR>도구 설명:'데이터 수정', <BR>iconCls:'option', <BR>id : 'tbar1', <BR>handler : function() <BR>{ <BR>수정 () ; <BR>} <BR>},'-',{ <BR>text:'delete', <BR>tooltip:'data 삭제', <BR>iconCls:'remove', <BR>핸들러: function( ) <BR>{ <BR>remove(); <BR>} <BR>}] <br><br>}) <br><br>//데이터 로드<BR>ds.load({ params: {start:0,limit:10}}); <BR>//Render Grid <BR>grid.render() <br><br>//사용자 함수 추가<BR>var add = function() <BR>{ <BR>newFormWin = new Ext.Window({ <BR>layout : 'fit', <BR>width : 400, <BR>height : 300, <BR>closeAction : 'hide', <BR> plain : true, <BR>title : '사용자 관리', <BR>items : form1 <br><br>}) <BR>newFormWin.show() <BR><br>// 사용자 함수 수정 <br>var 수정 = function() <BR>{ <BR>var _record = Grid.getSelectionModel().getSelected() <BR>if (!_record) <BR>{ <BR>Ext.Msg .alert('수정할 항목을 선택하세요!'); <BR>} <BR>else <BR>{ <BR>myFormWin() <BR>form2.form.load <BR>({ <BR> url : '${ctx}/UserServlet?method=getById&id=' _record.get('id'), <BR>waitMsg : '데이터 로드 중', <BR><br>failure : function() { <br>Ext. Msg.alert('로딩 실패'); <BR>}, <BR>success : function() { <BR>//Ext.Msg.alert('로딩 성공! '); <BR>} <BR>}); <BR>} <BR>} <BR>//사용자 양식 수정 <BR>var myFormWin = function() { <BR>newFormWin = new Ext.Window ( { <BR>layout : 'fit', <BR>width : 400, <BR>height : 300, <BR>closeAction : 'hide', <BR>plain : true, <BR>title : 'Modify user' , <BR>항목 : form2 <BR>}); <BR>newFormWin.show(''); <BR>} <BR><br>/**//*JsonReader는 Form에 배치해야 하며 데이터 로딩 순서가 문제라는 점에 유의하세요.*/ <br>var jsonFormReader = new Ext . data.JsonReader( { <BR>root : 'list', <BR>totalProperty : 'totalCount', <BR>successProperty : '@success' <BR>}, [ <BR>{ <BR>name : 'id ' , <BR>매핑 : 'id', <BR>유형 : 'int', <BR>}, <BR>{ <BR>이름 : '사용자 이름', <BR>매핑 : '사용자 이름' <BR>} , { <BR>name : 'age', <BR>mapping : 'age', <BR>type : 'int' <BR>}, { <BR>name : 'remark', <BR>mapping : 'remark' <BR>}]); <BR><br>//사용자 양식 추가 <br>form1 = new Ext.FormPanel({ <BR>labelWidth : 75, <BR>frame : true, <BR>title : '추가 user', <BR>bodyStyle : 'padding:5px 5px 0', <BR>width : 350, <BR>waitMsgTarget : true, <BR>url : '${ctx}/UserServlet?method=save', <BR>defaults : <BR>{ <BR>width : 230 <BR>}, <BR>defaultType : 'textfield', <BR>items : [ <BR>{ <BR>fieldLabel : 'username', <BR>name : 'username', //백그라운드에서 데이터를 가져오려면 <BR>allowBlank를 사용하세요. : false, <BR>blankText : 'Username은 비워둘 수 없습니다.' <BR>}, { <BR>xtype : 'numberfield', <BR>maxValue : 100, <BR>maxText : '나이는 100세 이상일 수 없습니다.', <BR>minValue : 1, <BR>minText : '나이는 1세 이상일 수 없습니다.', <BR>fieldLabel : ' Age', <BR> name : 'age', <BR>allowBlank : false, <BR>blankText : 'Age는 비워둘 수 없습니다.' <BR>}, new Ext.form.TextArea( { <BR>fieldLabel : 'Remarks ', <BR>name : 'remark', <BR>growMin : 234, <BR>maxLength : 50, <BR>maxLengthText : '최대 길이는 50자를 초과할 수 없습니다. <BR>})], <BR> <br>버튼 : [ { <br>텍스트 : '저장', <BR>disabled : false, <BR>handler : function() <BR>{ <BR><br>if(form1.form.isValid() ) <br>{ <BR>form1.form.submit( <BR>{ <BR>url : '${ctx}/UserServlet?method=save', <BR>success : 함수(from, action) <BR> { <BR>Ext.alert('사용자를 추가했습니다! '); <BR>ds.load({ <BR>params : { <BR>시작: 0, <BR>한계: 10 <BR>} <BR>}); function(form, action) { <BR>Ext.Msg.alert('사용자 추가에 실패했습니다!'); <BR>}, <BR>waitMsg: '데이터 저장, 나중에' <BR>}) <BR>newFormWin.hide() <BR>} <BR>else <BR>{ <BR>Ext .Msg.alert('정보가 성공적으로 입력되었는지 확인해주세요!') <BR>} <BR>} <BR>}, { <BR>text : '취소', <BR>handler : function( ) <BR>{ <BR>form1.form.reset(); <BR>} <BR>}] <BR>}) <br><br>//사용자 양식 수정 <BR>form2 = new Ext .FormPanel({ <BR>labelWidth : 75, <BR>frame : true, <BR>title : '사용자 수정', <BR>bodyStyle : 'padding:5px 5px 0', <BR>width : 350, <BR>waitMsgTarget : true, <BR>url : '${ctx}/UserServlet?method=update', <BR>reader : jsonFormReader, //양식 리더 지정, <BR>기본값으로 수정: <BR>{ <BR>width : 230 <BR>}, <BR>defaultType : 'textfield', <BR>items : [ <BR>{ <BR>xtype: 'hidden', <BR>name : 'id' <BR> }, <BR>{ <BR>fieldLabel : 'username', <BR>name : 'username', //백그라운드에서 데이터를 가져오려면 <BR>allowBlank : false, <BR>blankText : 'Username can be 비어 있을 수 없습니다'를 사용하세요. <BR>}, { <BR>xtype : 'numberfield', <BR>maxValue : 100, <BR>maxText : '나이는 100세를 초과할 수 없습니다', <BR>minValue : 1, <BR>minText : '나이 1세 미만일 수 없습니다', <BR>fieldLabel : 'age', <BR>name : 'age', <BR>allowBlank : false, <BR>blankText : 'Age는 비워둘 수 없습니다' <BR>}, new Ext.form .TextArea( { <BR>fieldLabel : 'remark', <BR>name : 'remark', <BR>growMin : 234, <BR>maxLength : 50, <BR>maxLengthText : '최대 길이는 50자 초과! ' <BR>})], <br><br>버튼 : [ { <BR>텍스트 : '수정', <BR>disabled : false, <BR>handler : function() <BR>{ <br><br>if(form2.form.isValid()) <BR>{ <BR>form2.form.submit( <BR>{ <BR>success : 함수(from, action) <BR>{ <BR>Ext.Msg .alert('사용자를 성공적으로 수정했습니다! '); <BR>ds.load({ <BR>params : { <BR>시작: 0, <BR>한계: 10 <BR>} <BR>}); function(form, action) { <BR>Ext.Msg.alert('사용자 수정에 실패했습니다!') <BR>}, <BR>waitMsg : '데이터를 나중에 저장합니다' <BR>}); newFormWin.hide(); <BR>} <BR>else <BR>{ <BR>Ext.Msg.alert('정보가 성공적으로 입력되었는지 확인해주세요!') <BR>} <BR> } <BR>}, { <BR>텍스트 : '취소', <BR>handler : function() <BR>{ <BR>form2.form.reset() <BR>} <BR>}] <BR> }); <BR><BR>//이벤트 삭제<BR>var Remove = function() <br>{ <br><BR>var _record = Grid.getSelectionModel().getSelected() <BR>if ( _record) <br>{ <br>Ext.MessageBox.confirm('삭제 확인', '선택한 데이터를 삭제하시겠습니까?', function(btn) <BR>{ <BR>if (btn == " 예") { <BR>var m = Grid.getSelections(); <BR>var jsonData = "" <BR>for (var i = 0, len = m.length;i < len; i ) <BR>{ <BR>var ss = m[i].get("id"); //사용자 ID, "id" 필드 이름<BR>if (i == 0) { <BR>jsonData = jsonData ss; <BR>} else { <BR>jsonData = jsonData "," ss <BR>} <BR>//데이터 소스에서 삭제 <BR>ds.remove(m[i])//삭제 데이터베이스 해당 레코드 <BR>Ext.Ajax.request({ <BR>url: '${ctx}/UserServlet?method=remove&id=' ss <BR>}) <BR>} <BR><BR>ds .load ({ <BR>params : { <BR>시작 : 0, <br>한계 : 10, <br>delData : jsonData <BR>} <BR>}); <BR>}); <BR>} <BR>else <BR>{ <br>Ext.Msg.alert('삭제할 데이터 항목을 선택하세요! '); <br>} <BR>}; <BR>/**//***/ <BR>Ext.state.Manager.setProvider <BR>( new Ext.state.SessionProvider({state: Ext.appState })); <BR><BR>// 중앙 탭 <BR>var tabs = new Ext.TabPanel({ <BR>region : 'center', <BR>margins : '3 3 3 0', <BR>activeTab : 0, <BR>defaults : { <br>autoScroll : true <br>}, <BR>items : [{ <BR>title : 'ExtJS version', <BR>contentEl: 'user-grid' //채울 HTML ID <BR>},{ <BR>title : 'GTGrid 버전', <BR>html : 'GTGrid는 현재 Extjs와의 통합을 지원하지 않습니다(창),<a href="${ctx }/gt.jsp">내가 만든 예를 보려면 여기를 클릭하세요</>' <br>},{ <br>title: '더 많은 관심', <br>html: '더 많은 콘텐츠를 볼 수 있습니다< ;a href="http://www.blogjava.net/supercrsky">내 블로그</a>' <br>}] <br>}) <br><br>// 서쪽 패널 <br> var nav = new Ext.Panel({ <br>title : 'Menu Directory', <br>region : 'west', <br>split : true, <br>width : 200, <br>collapsible : true, <br>margins : '3 0 3 3', <br>cmargins : '3 3 3 3', <br>layout: 'accordion', <br>layoutConfig:{ <br>animate:true <br>}, <br>항목: [{ <br>html: Ext.example.shortBogusMarkup, <br>title:'사용자 관리', <br>autoScroll:true, <br>border:false, <br>iconCls: 'nav' <br>},{ <br>title:'사용자 구성', <br>html: Ext.example.shortBogusConfig, <br>border:false, <br>autoScroll:true, <br>iconCls:' 설정' <br>}] <br>}) <br><br>var win = new Ext.Window({ <br>title : 'User Management Micro System', <br>closable : true, <br> maximized : true, <br>최소화 가능 : true, <br>너비 : '100%', <br>높이 : '100%', <br>일반 : true, <br>레이아웃 : '테두리', <br> 닫기 가능 : false, <br>항목 : [nav, 탭] <br>}) <br><br>win.show() <br>win.maximize() <br><br>}); -> <br></script> <br><body><br><!-- 사이드바에 사용되는 js --> ="text/javascript" src="js/ext-2.2/shared/examples.js"></script> <br></body> <br></html><br>전체 소스 코드 다운로드<a href="http://xiazai.jb51.net/200907/yuanma/Ext_User.rar" target="_blank">다운로드하려면 여기를 클릭하세요</a> </div>