ext js submit 表单提交

1、

Submitting a Form 如何提交表单

最简单的提交数据到服务器端的办法就是设置BasicForm的url配置,因为Form Panel封装了BasicForm,这个url直接配置给Form Panel亦可,它会透传给BasicForm的。

Ext.create('Ext.form.Panel', {
    ...
    url: 'add_user',
    items: [
        ...
    ]
});

BasicForm的submit方法可以把数据提交到配置的url上:

Ext.create('Ext.form.Panel', {
    ...
    url: 'add_user',
    items: [
        ...
    ],
    buttons: [
        {
            text: 'Submit',
            handler: function() {
                var form = this.up('form').getForm(); // get the basic form
                if (form.isValid()) { // make sure the form contains valid data before submitting
                    form.submit({
                        success: function(form, action) {
                           Ext.Msg.alert('Success', action.result.msg);
                        },
                        failure: function(form, action) {
                            Ext.Msg.alert('Failed', action.result.msg);
                        }
                    });
                } else { // display error alert if the data is invalid
                    Ext.Msg.alert('Invalid Data', 'Please correct form errors.')
                }
            }
        }
    ]
});

上面的例子中,button配置了一个处理函数用来处理表单提交,处理函数中做了下面几个动作:

  1. 首先找到对BasicForm的引用
  2. 提交之前调用了isValid方法确保每个表单字段都已经填写正确
  3. 最后调用submit方法,并传递了两个回调函数success和failure,在这两个回调函数的参数中,action.result可以引用到服务器端返回JSON的解析后的对象

像例子中的表单提交,期望服务器端返回的值,应该像这样:

{ "success": true, "msg": "User added successfully" } 

2、

Binding a Form to a Model 如何绑定表单和模型

ExtJS中,模型用来定义各种数据,也可以加载和保存数据到服务器。例如一个User模型需要定义User的字段,同时也可以设置代理用来加载和保存数据:

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: ['firstName', 'lastName', 'birthDate'],
    proxy: {
        type: 'ajax',
        api: {
            read: 'data/get_user',
            update: 'data/update_user'
        },
        reader: {
            type: 'json',
            root: 'users'
        }
    }
}); 

有关模型的更多内容请查看<ExtJS 4 数据(包)详解>

数据可以通过loadRecord方法直接从Model加载进入Form Panel:

Ext.ModelMgr.getModel('User').load(1, { // load user with ID of "1"
    success: function(user) {
        userForm.loadRecord(user); // when user is loaded successfully, load the data into the form
    }
}); 

最后,代替submit方法,可以使用BasicForm的updateRecord方法更新form绑定的model,然后用Model的save方法保存数据:

Ext.create('Ext.form.Panel', {
    ...
    url: 'add_user',
    items: [
        ...
    ],
    buttons: [
        {
            text: 'Submit',
            handler: function() {
                var form = this.up('form').getForm(), // get the basic form
                    record = form.getRecord(); // get the underlying model instance
                if (form.isValid()) { // make sure the form contains valid data before submitting
                    form.updateRecord(record); // update the record with the form data
                    record.save({ // save the record to the server
                        success: function(user) {
                            Ext.Msg.alert('Success', 'User saved successfully.')
                        },
                        failure: function(user) {
                            Ext.Msg.alert('Failure', 'Failed to save user.')
                        }
                    });
                } else { // display error alert if the data is invalid
                    Ext.Msg.alert('Invalid Data', 'Please correct form errors.')
                }
            }
        }
    ]
}); 
3、 使用store提交。
如果使用ajax方式。
api : Object

Specific urls to call on CRUD action methods "create", "read", "update" and "destroy". Defaults to:

api: { create : undefined, read : undefined, update : undefined, destroy : undefined }

The url is built based upon the action being executed [create|read|update|destroy] using the commensurate api property, or if undefined default to the configured Ext.data.Store.url.

For example:

api: { create : '/controller/new', read : '/controller/load', update : '/controller/update', destroy : '/controller/destroy_action' }





 之前总是封不起Extjs中form.submit()提交与Ext.Ajax.request()的区别,现在仍是分不清,但是知道怎么用不会出错了。

方案1:

java action中的代码

 

Java代码   收藏代码
  1. String datastring = "total : " + rehpage.getCount() + ", root : [";  
  2. if (rehpage != null) {  
  3.     datastring += buildJsonByPage(rehpage);  
  4. }  
  5. datastring = datastring + "]";  
  6. StringBuffer buff = new StringBuffer("{success:true,mes:{");  
  7. buff.append(datastring);  
  8. buff.append("}}");  
  9.   
  10. System.out.println("datastring is: " + buff.toString());  
  11. request.setAttribute("responseText", buff.toString().replaceAll("\r\n",  
  12.         " ").replaceAll("\n"" "));// 将拼接好的数据放到request  
  13. return SUCCESS;  

 对用的Extjs中的代码为:

 

Java代码   收藏代码
  1.     Ext.Ajax.request({  
  2.                 url : "./rehearsal/queryTableData.action",  
  3.                 params : {  
  4.                     search_place : rehearsal_place,  
  5.                     search_time : dt  
  6.                             .format('Y-m-d'),  
  7.                     search_valuation : null,  
  8.                     search_subject : search_subject  
  9.                 },  
  10.                 waitMsg : '正在提交数据',  
  11.                 waitTitle : '提示',  
  12.                 method : "POST",  
  13.                 success : function(response) {  
  14.                     var respText = Ext.util.JSON  
  15.                             .decode(response.responseText);  
  16.                     if (respText.success) {  
  17.                         szcdc_rehearsal_one_grid  
  18.                                 .getStore()  
  19.                                 .loadData(respText.mes);  
  20.                     }  
  21.                 },  
  22.                 failure : function(response) {  
  23.                     Ext.Msg.alert('提示',  
  24.                             "操作失败:输入非法字符!!!");  
  25.                 }  
  26.             });  
  27. }  

 方案2:

java action中的代码是:

 

 

Java代码   收藏代码
  1. String datastring = "total : " + rehpage.getCount() + ", root : [";  
  2. if (rehpage != null) {  
  3.     datastring += buildJsonByPage(rehpage);  
  4. }  
  5. datastring = datastring + "]";  
  6. StringBuffer buff = new StringBuffer("{success:true,");  
  7. buff.append(datastring);  
  8. buff.append("}");  
  9.   
  10. System.out.println("datastring is: " + buff.toString());  
  11. request.setAttribute("responseText", buff.toString().replaceAll("\r\n",  
  12.         " ").replaceAll("\n"" "));// 将拼接好的数据放到request  
  13. return SUCCESS;  

 对应的Extjs代码为:

 

Java代码   收藏代码
  1. search_form.submit({  
  2.     url : "./rehearsal/queryTableData.action",  
  3.     baseParams : {  
  4.         search_place : rehearsal_place,  
  5.         search_time : search_time,  
  6.         search_valuation : search_valuation,  
  7.         search_subject : search_subject  
  8.     },  
  9.     waitMsg : '正在提交数据',  
  10.     waitTitle : '提示',  
  11.     method : "POST",  
  12.     success : function(form, action) {  
  13.         // 得到数据  
  14.         var result = Ext.util.JSON  
  15.                 .decode(action.response.responseText);// 就可以取出来。如果是数组,那么很简单  
  16.         // 把数据放到结果里面  
  17.         szcdc_rehearsal_one_grid.getStore()  
  18.                 .loadData(result);  
  19.     },  
  20.     failure : function(form, action) {  
  21.         Ext.Msg.alert('提示'"操作失败:输入非法字符!!!");  
  22.     }  
  23. }); 
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    2.   
    3. <html xmlns="http://www.w3.org/1999/xhtml">  
    4. <head>  
    5.     <title></title>  
    6.     <!--ExtJs4.0官方下载ExtJs样式文件-->  
    7.     <link href="extjs/resources/css/ext-all.css" rel="stylesheet" type="text/css" />  
    8.     <!--ExtJs4.0官方下载ExtJs文件-->  
    9.     <script src="extjs/ext-all.js" type="text/javascript"></script>  
    10.     <script language="javascript" type="text/javascript">  
    11.         function login_click(b) {  
    12.             //1.拿到表单面板  
    13.             var loginFormPanel=Ext.getCmp("loginFormPanel");  
    14.             //2.通过面板对象拿到它里面的表单  
    15.             var form = loginFormPanel.getForm();  
    16.             //3.在提交前,判断表单输入是否有误  
    17.             if (!form.isValid()) {  
    18.                 return;  
    19.             }  
    20.             //4.调用提交的方法,提交该表单  
    21.             form.submit({  
    22.                 waitMsg:"正在向服务器提交数据",  
    23.                 url:"Extjs1.aspx",  
    24.                 success: function (f, a) {  
    25.                     Ext.MessageBox.alert("提示""你的详细信息如下:<br/>用户名:" + a.result.name + "<br/>密 码:" + a.result.password + "<br/>你上传的图片数量为:"   
    26.   
    27. + a.result.filecount);  
    28.                 },  
    29.                 failure: function (f,a) {  
    30.                     Ext.MessageBox.alert("提示", a.result.msg);  
    31.                 }  
    32.             });  
    33.         }  
    34.         Ext.onReady(function () {  
    35.             var txtUserName = new Ext.form.field.Text({  
    36.                 fieldLabel: "用户名",  
    37.                 labelWidth: 50,  
    38.                 margin: "10 0 5 0",  
    39.                 allowBlank: false,  
    40.                 blankText: "用户名不能为空",  
    41.                 name: "txtUserName"  
    42.             });  
    43.             var txtUserPassword = new Ext.form.field.Text({  
    44.                 fieldLabel: "密 码",  
    45.                 labelWidth: 50,  
    46.                 margin: "5 0 5 0",  
    47.                 inputType: "password",  
    48.                 allowBlank: false,  
    49.                 blankText: "密码不能为空",  
    50.                 name: "txtUserPassword"  
    51.             });  
    52.             var file = new Ext.form.field.File({  
    53.                 fieldLabel:"请选择一张图片",  
    54.                 buttonText:"浏览",  
    55.                 regex:/^.+\.(jpg|png|gif)$/,  
    56.                 regexText:"你只能选择jpg,png,gif格式的图片"  
    57.             });  
    58.             var win = new Ext.window.Window({  
    59.                 title: "提交数据——登录",  
    60.                 height: 200,  
    61.                 width: 350,  
    62.                 layout: "fit",  
    63.                 items: [  
    64.                     { xtype: "form", frame: true, layout: { type: "vbox", align: "center" },  
    [javascript] view plain copy print ?
    1.                      items: [txtUserName, txtUserPassword, file], buttons: [{ text: "登录",   
    2.   
    3.                     handler: login_click}], id: "loginFormPanel" }  
    4.                 ]  
    5.             });  
    6.             win.show();  
    7.         });  
    8.     </script>  
    9. </head>  
    10. <body>  
    11.   
    12. </body>  
    13. </html>  


    //Extjs1.aspx.cs

    [csharp] view plain copy print ?
    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Linq;  
    4. using System.Web;  
    5. using System.Web.UI;  
    6. using System.Web.UI.WebControls;  
    7.   
    8. public partial class Extjs1 : System.Web.UI.Page  
    9. {  
    10.     protected void Page_Load(object sender, EventArgs e)  
    11.     {  
    12.         System.Threading.Thread.Sleep(3000);  
    13.         string name = Request.Form["txtUserName"];  
    14.         string password = Request.Form["txtUserPassword"];  
    15.           
    16.         //.............................  
    17.         int pointIndex=Request.Files[0].FileName.LastIndexOf(".");  
    18.         string lastName=Request.Files[0].FileName.Substring(pointIndex);  
    19.         string fileName = new Random().Next(10000).ToString();  
    20.         string path = Server.MapPath("") + "/" + fileName + lastName;  
    21.         Request.Files[0].SaveAs(path);  
    22.         Response.Write("{success:true,msg:'成功',name:'"+name+"',password:'"+password+"',filecount:'"+Request.Files.Count+"'}");  
    23.         Response.End();  
    24.     }  
    25. }  


    效果预览如下:

    ext js submit 表单提交_第1张图片

你可能感兴趣的:(ext js submit 表单提交)