1,利用表單的原生方式提交,以下:(須要本身調用form.isValid()函數來校驗表單參數格式)
1.x中:
form.el.dom.action="../excel.do";
form.el.dom.target="_blank";
form.el.dom.submit();
瀏覽器在新窗口打開../excel.do,並傳遞表單參數,
一樣這裏的../excel.do能夠用servlet,jsp等替換。瀏覽器
2.x中
form.getForm().getEl().dom.actiong="../excel.do";
form.getForm().getEl().dom.target="_blank";
form.getForm().getEl().dom.submit();服務器
2,利用Ext表單的默認提交 (不須要本身校驗,form.submit();函數中會本身校驗,可是須要寫失敗函數或者失敗事件,用來提示用戶校驗失敗)
1.x form.submit();
2.x form.getForm().submit();
若是form控件定義了URL,那麼這兩個提交將會請求這個URL而且傳遞form的參數。其底層實現是Ajax請求。
若是form控件沒有定義 URL,那麼這2個submit函數能夠傳遞參數,相似以下:
Form.submit({url:'confManager/newConfTask.do',waitMsg:'保存數據',waitTitle:"請等候。。。",params{p1:p1,p2:p2},success:sFn,failure:fFn});
請求會把form控件中的參數和這裏submit函數中的參數一同發送到後臺。
因爲這種方式存在回調函數和觸發事件。
所以若是調用成功會執行sFn這個函數,失敗會執行fFn這個函數。
研究form提交源代碼,發現若是定義了actioncomplete,actionfailed.那麼根據表單提交的實際狀況會觸發不一樣的事件。
具體說明:
若是調用到了後臺,而且返回成功結果。那麼若是定義了success:sFn則先執行sFn,若是定義了actioncomplete,則接着觸發actioncomplete對應的事件
若是調用到了後臺,而且返回成功失敗。那麼若是定義了failure:fFn則先執行fFn,若是定義了actionfailed,則接着觸發actionfailed對應的事件dom
至於返回結果何爲成功,何爲失敗,能夠本身對源碼擴展,增長成功失敗的判斷規則。
補充:jsp
定義表單提交失敗的觸發事件
Form.on('actionfailed',formReqFail);函數
function formReqFail(f,a){
if(a.failureType == Ext.form.Action.CLIENT_INVALID)
Ext.MessageBox.alert('錯誤', '本地校驗錯誤');
else if (a.failureType == Ext.form.Action.SERVER_INVALID)
Ext.MessageBox.alert('錯誤', '服務器校驗錯誤');
else if (a.failureType == Ext.form.Action.CONNECT_FAILURE)
Ext.MessageBox.alert('錯誤', '鏈接錯誤或超時');
else if (a.failureType == Ext.form.Action.LOAD_FAILURE)
Ext.MessageBox.alert('錯誤', 'load 數據錯誤');
}url
3,利用Ajax方式提交,(須要本身調用form.isValid()函數來校驗表單參數格式)
直接利用:
Ext.lib.Ajax.request({
method :'POST',//提交方式
url :'excel.jsp',//提交的URL,能夠是servlet,*.do,*.action等
params:{p1:p1,p2:p2},//提交的參數,後臺能夠經過request.getParameter("p1");得到參數
success :sFn,//當請求成功時調用的方法
failure :fFn,//請求失敗時調用的方法
callback :cFn,//當收到HTTP響應時調用的方法。無論請求成功仍是失敗,回調方法都會被調用
form :'excelForm'//form>表單 元素或者<form>的id ,能夠從其中獲取參數
});spa
根據Ext的Api自行決定須要哪些配置項。excel