Extjs4.2进阶--完整前后台交互带数据库(带源码)

来源:互联网 发布:淘宝被盗号了怎么办 编辑:程序博客网 时间:2024/04/30 01:41

上一次的初识Extjs4.2-hello world ,演示了简单的弹窗以及需要载入哪些文件。这次讲一个简单但是完整的项目,前台是一个表单数据提交,后台是servlet,数据库有张简单的表。

一、需要导入的包,除了上次需要导入的文件外,还有额外导入extjs-4.2.0\examples\ux\form下的ItemSelector.js和MultiSelect.js文件;

二、前台的页面:

[html] view plain copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5.     <title></title>  
  6.     <!--ExtJs框架开始-->  
  7.     <link rel="stylesheet" type="text/css" href="./Extjs4.2/resources/css/ext-all.css" />  
  8.     <script type="text/javascript" src="./Extjs4.2/ext-all.js"></script>  
  9.      <script type="text/javascript" src="./Extjs4.2/locale/ext-lang-zh_CN.js"></script>  
  10.     <!-- 再加三个文件,1CSS+2js -->  
  11.     <link rel="stylesheet" type="text/css" href="./Extjs4.2/MultiSelect/css/ItemSelector.css" />  
  12.     <script type="text/javascript" src="./Extjs4.2/MultiSelect/ItemSelector.js"></script>  
  13.     <script type="text/javascript" src="./Extjs4.2/MultiSelect/MultiSelect.js"></script>  
  14.     <!--ExtJs框架结束-->  
  15.     <script type="text/javascript">  
  16.     Ext.onReady(function(){  
  17.           
  18.          //定义数组数据  
  19.         var ds = Ext.create('Ext.data.ArrayStore', {  
  20.              data: [['上午', '上午'], ['下午', '下午'], ['晚上', '晚上']],//第一个参数表示id,通过方法可以得到这个值,第二个表示显示页面的值  
  21.              fields: ['value','text'],  
  22.              sortInfo: {  
  23.                   field: 'value',  
  24.                  direction: 'ASC'  
  25.             }  
  26.        });  
  27.         //表单设置  
  28.         var form=Ext.create('Ext.form.Panel',{  
  29.         title:'表单',  
  30.         width:340,  
  31.         bodyPadding:10,//在body元素上设置padding样式的快捷方式。  
  32.         frame:true,  
  33.         buttonAlign:'center',//居中  
  34.         renderTo:Ext.getBody(),  
  35.         //items属性表示该表单有多少个控件  
  36.         items:[  
  37.         //输入框  
  38.         {  
  39.         xtype:'textfield',  
  40.         name:'name',  
  41.         fieldLabel:'姓名',  
  42.         allowBlank:false,  
  43.         maxLength:10  
  44.         },  
  45.         //单选框  
  46.         {  
  47.         xtype:'combobox',  
  48.         name:'level',  
  49.         fieldLabel:'身份',  
  50.         emptyText:'请选择',  
  51.         allowBlank:false,  
  52.         store:[['正式员工','正式员工'],['实习生','实习生'],['外包人员','外包人员']]  
  53.         },  
  54.         //多选框  
  55.         {  
  56.             xtype: 'checkboxgroup',  
  57.             fieldLabel: '兴趣',  
  58.             id: 'hobby',  
  59.             columns: 2,  
  60.             vertical: true,  
  61.             items: [  
  62.             { boxLabel: '音乐', name: 'rb', inputValue: '1', checked: true },  
  63.             { boxLabel: '运动', name: 'rb', inputValue: '2' },  
  64.             { boxLabel: '画画', name: 'rb', inputValue: '3' }  
  65.             ]  
  66.         },  
  67.         //文件上传文本框  
  68.         {  
  69.         xtype:'filefield',  
  70.         name:'file',  
  71.         id:'file',  
  72.         fieldLabel:'上传',  
  73.         allowbBlank:false,  
  74.         msgTarget:'side',  
  75.         buttonText:'选择文件'  
  76.         },  
  77.     //左右选择框  
  78.         {  
  79.             xtype: 'itemselector',  
  80.             name: 'worktime',  
  81.             id: 'worktime',  
  82.             height : 200,  
  83.             fieldLabel: '选择上班时间',  
  84.            // imagePath: '../ux/images/',  
  85.            imagePath: './Extjs4.2/MultiSelect/css/images/',  
  86.             store: ds,  
  87.             displayField: 'text',  
  88.             valueField: 'value',  
  89.              
  90.             allowBlank: false,  
  91.             msgTarget: 'side',  
  92.             fromTitle: '选择时间',  
  93.             toTitle: '工作时间'  
  94.         }  
  95.         ]//form表单的items属性在此结束  
  96.         ,   
  97.         //Form表单的按钮设置,其中的handler属性方法可以使用url与后台进行交互  
  98.         buttons: [{  
  99.                 text: '保存',  
  100.                 handler: function() {  
  101.                     var form=this.up('form');  
  102.                     var name=form.down('textfield[name=name]').value;//输入框值的获取  
  103.                     var  sf=form.down('combobox[name=level]').value; //单选框值的获取  
  104.                     //验证名字不能为空,要加return  
  105.                     if(!name){                                           
  106.                         alert('名字不能为空!');  
  107.                         return;}  
  108.                     if(!sf){  
  109.                         alert('身份不能为空!');  
  110.                         return;}  
  111.                     //多选框值的获取,通过循环加入数组中  
  112.                     var hobbyValue = Ext.getCmp('hobby').getChecked();  
  113.                     var hobby="";  
  114.                     Ext.Array.each(hobbyValue, function(item){  
  115.                     hobby+=','+item.boxLabel;  
  116.                     });   
  117.                     hobby=hobby.substring(1);//  
  118.                       
  119.                     var file=Ext.getCmp("file").getValue();//文件选择框的文件名的获取  
  120.                     //itemselector控件即左右选择框的值的获取  
  121.                     var worktime=Ext.getCmp("worktime").getValue();  
  122.                     var wc="";  
  123.                     for(var i=0;i<worktime.length;i++){  
  124.                         wc += ","+worktime[i];  
  125.                     }  
  126.                     wc = wc.substring(1);  
  127.                      
  128.                      
  129.                     var totalMessage='姓名:'+name+' 身份:'+sf+' 兴趣:'+hobby+' 上传文件地址:'+file+' 上班时间: '+worktime;  
  130.                       
  131.                   //Ext.MessageBox.alert('提示', '输入的地址' + file);  
  132.                   //Ext.MessageBox.alert('提示','输入的左右选择框是'+itemselector);  
  133.                   //Ext.MessageBox.alert('提示', '您的兴趣是' + hobby);  
  134.                   // Ext.MessageBox.alert('提示框',sf);  
  135.                   // Ext.MessageBox.alert('提示框','提交成功,正在保存数据,请稍后!');  
  136.                   //Ext.MessageBox.alert('输入信息为:','姓名:'+name+'<br />'+' 身份:'+sf+'<br />'+' 兴趣:'+hobby+'<br />'+' 上传文件地址:'+file+'<br />'+' 上班时间: '+worktime);  
  137.                   //JSON为参数  
  138.                   var json={};  
  139.                   Ext.apply(json,{name:name,sf:sf,hobby:hobby,file:file,worktime:wc});  
  140.                 
  141.                   Ext.Ajax.request({//此处进行保存数据到后端  
  142.                       method:'POST',  
  143.                       //url:就是我们要请求的路径  
  144.                       url:'/Extjs/FormServlet',  
  145.                       //success:是服务器处理成功返回  
  146.                       success:function(response){  
  147.                          // Ext.Msg.alert('返回成功',response.responseText,function(){  
  148.                          //    store.load();  
  149.                          // });  
  150.                          Ext.Msg.alert("返回信息","提交成功。");  
  151.                       },  
  152.                       //failure:是服务器处理失败返回  
  153.                       failure:function(){  
  154.                           Ext.Msg.alert("错误","与后台联系的时候出了问题。");  
  155.                       },  
  156.                       //params:里面的参数用逗号隔开,就是我们要发出请求带的参数  
  157.                       //{name:name,sf:sf,hobby:hobby,file:file,worktime:worktime}  
  158.                       params:json  
  159.                   });  
  160.                   
  161.                 }  
  162.             }]  
  163.         });//form表单在此结束  
  164.   
  165.         var win = new Ext.Window({  
  166.                         title: '窗口',  
  167.                         width: 340,  
  168.                         height: 500,  
  169.                         resizable: true,  
  170.                         modal: true,  
  171.                         closable: true,  
  172.                         maximizable: true,  
  173.                         minimizable: true,  
  174.                         items: form //将form表单放入win窗口中  
  175.           });//win窗口在此结束  
  176.           
  177.         win.show();//显示窗口  
  178.         });  
  179.   
  180.     </script>  
  181. </head>  
  182. <body>  
  183.   
  184. </body>  
  185. </html>  
说明:该前台页面代码中引入的
<link rel="stylesheet" type="text/css" href="./Extjs4.2/MultiSelect/css/ItemSelector.css" />
<script type="text/javascript" src="./Extjs4.2/MultiSelect/ItemSelector.js"></script>
<script type="text/javascript" src="./Extjs4.2/MultiSelect/MultiSelect.js"></script>
三个文件不知道为什么引不进去,查看firebug发现其使用了动态加载的方式,
路径为/Extjs/WebRoot/Extjs4.2/src/ux/form/ItemSelector.js
      /Extjs/WebRoot/Extjs4.2/src/ux/form/MultiSelect.js
所以只好顺着它的意思,建立了Extjs4.2/src/ux/form该路径,并把两个js文件放入其中,使页面正常运行。

二、后台代码

数据库连接类:

需要在WebRoot/WEB_INF/lib文件下加入ojdbc6.jar包。在F:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib文件夹下,Oracle的安装文件夹

[java] view plain copy
  1. public class GetCollection {  
  2.   
  3.     public Connection getConn(){  
  4.         Connection conn = null;// 创建一个数据库连接  
  5.         try  
  6.         {  
  7.             Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序  
  8.             //System.out.println("开始尝试连接数据库!");  
  9.             String url = "jdbc:oracle:" + "thin:@127.0.0.1:1521:chenn";// 127.0.0.1是本机地址,chenn表示数据库名称  
  10.             String user = "system";// 用户名,系统默认的账户名  
  11.             String password = "Oracle11g";// 你安装时选设置的密码  
  12.             conn = DriverManager.getConnection(url, user, password);// 获取连接  
  13.             //System.out.println("连接成功!");  
  14.               
  15.         }  
  16.         catch (Exception e)  
  17.         {  
  18.             e.printStackTrace();  
  19.         }  
  20.         return conn;  
  21.     }  
  22. }  


servlet类:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class FormServlet extends HttpServlet {  
  2.    
  3.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  4.             throws ServletException, IOException {  
  5.         doPost(req,resp);  
  6.     }  
  7.          
  8.      
  9.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  10.             throws ServletException, IOException {  
  11.         req.setCharacterEncoding("UTF-8");  
  12. //        String json = "{total:5,root:[";  
  13. //        for(int i = 0;i<5;i++){  
  14. //            json +="{id:"+i+",name:'name"+i+"',descn:'desc"+i+"'}";  
  15. //             
  16. //            json+=",";  
  17. //              
  18. //        }  
  19. //        json+="]}";  
  20.         String name = req.getParameter("name");  
  21.         System.out.println(name);  
  22.         String sf = req.getParameter("sf");  
  23.         System.out.println(sf);  
  24.         String hobby = req.getParameter("hobby");  
  25.         System.out.println(hobby);  
  26.         String url = req.getParameter("file");  
  27.         System.out.println(url);  
  28.         String worktime = req.getParameter("worktime");  
  29.         System.out.println(worktime);  
  30.         resp.getWriter().print(name+sf+hobby+url+worktime);  
  31. //        resp.getWriter().print(json);  
  32.           
  33.           
  34.         GetCollection getconn=new GetCollection();  
  35.         Connection conn=getconn.getConn();  
  36.        
  37.         PreparedStatement ps=null;  
  38.         String sql="insert into myMessage(name,sf,hobby,url,worktime) values(?,?,?,?,?)";  
  39.         try {  
  40.             ps=conn.prepareStatement(sql);  
  41.             ps.setString(1, name);  
  42.             ps.setString(2, sf);  
  43.             ps.setString(3, hobby);  
  44.             ps.setString(4, url);  
  45.             ps.setString(5, worktime);  
  46.             ps.executeUpdate();  
  47.         } catch (SQLException e) {  
  48.             // TODO Auto-generated catch block  
  49.             e.printStackTrace();  
  50.         }  
  51.     }  
  52. }  


三、数据库创建语言:

数据库名为chenn,表建立SQL语句如下

[sql] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. --建表myMessage  
  2. create table myMessage( myID number(10) not null primary key,    
  3.     name varchar2(40) not null,    
  4.     sf varchar2(40) not null,   
  5.     hobby varchar2(40) not null,     
  6.     url varchar2(300) null,  
  7.     worktime varchar2(40) not null);  
  8.   
  9. --创建序列my_autoinc_seq:  
  10. create sequence my_autoinc_seq    
  11.        minvalue 1    
  12.        maxvalue 99999999    
  13.        start with 1    
  14.        increment by 1    
  15.        nocycle    
  16.        nocache    
  17.        order;   
  18.          
  19. --创建触发器my_autoinc_tg:        
  20. create or replace trigger my_autoinc_tg    
  21. before insert on myMessage for each row  --表示在插入一行数据之前  
  22. begin    
  23. select my_autoinc_seq.nextval into :new.myID from dual; --myID即主键 ,dual表示伪表  
  24. end my_autoinc_tg;  

四、web.xml配置

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <servlet-mapping>  
  2.     <servlet-name>FormServlet</servlet-name>  
  3.     <url-pattern>/FormServlet</url-pattern>  
  4.   </servlet-mapping>  

测试:



源码下载地址:

http://pan.baidu.com/s/1dDfBQhV

0 0
原创粉丝点击