? 傳統(tǒng)的Mode2模式的服務(wù)器端框架在處理AJAX應(yīng)用的時候存在一定的不適應(yīng)性,這主要的原因在于Model2基于推模式,它隱含的假設(shè)是基于action的處理結(jié)果生成整個頁面,而AJAX應(yīng)用中所強(qiáng)調(diào)的是頁面局部的變化,只更新發(fā)生變化的部分,而不是重新生成整個頁面(change instead of create), 這兩者之間存在著內(nèi)在的不協(xié)調(diào)。有些人推崇后臺服務(wù)程序只返回xml數(shù)據(jù)的方法,將顯示層完全推到前臺。雖然在前臺通過js腳本操縱DOM節(jié)點可以實現(xiàn)非常細(xì)粒度上的控制,但是我們并不總是需要最細(xì)粒度上的控制權(quán)的。例如現(xiàn)在我們在前臺實現(xiàn)一個grid控件, grid控件本身只需要控制到單元格層次即可,而不需要對于單元格里存放什么內(nèi)容有預(yù)先的假設(shè). grid.getCell(i,j).innerHTML = cellHtml是非常自然的一種解決方式。完全通過dom來構(gòu)造界面面臨著眾多問題,除了瀏覽器bug這種揮之不去的噩夢之外,在實現(xiàn)過程中我們往往會引入對界面元素的大量限制條件,而無法做到集成各種來源的控件。
? 在服務(wù)器端生成頁面片斷的方式也稱為AJAH,表面上看起來它比AJAX要簡易一些,是很多服務(wù)器端框架引入AJAX概念的鄉(xiāng)間小徑。但有趣的是在基于拉模式(pull mode)的服務(wù)器端MVC框架中,AJAH是在架構(gòu)上比AJAX更加靈活的一種方式。在witrix平臺的jsplet框架中,web訪問的基本形式如下:
?? /view.jsp?objectName=XXObject&objectEvent=XXEvent&otherArgs&tplPart=XXPart
其中objectName對應(yīng)于后臺的服務(wù)對象,objectEvent參數(shù)映射到服務(wù)對象的方法,view.jsp是對于后臺對象進(jìn)行渲染的模板頁面,而tplPart參數(shù)可以指定只使用模板的某一部分進(jìn)行渲染。如果我們選擇json.jsp或者burlap.jsp作為渲染模板,則可以退化到返回數(shù)據(jù)而不是內(nèi)容的方式。在js中進(jìn)行簡單的封裝后我們可以通過如下方式進(jìn)行遠(yuǎn)程調(diào)用:
? new js.Ajax().setObjectName("XXObject").setObjectEvent("XXEvent").addForm("XXFormId").callRemote(callbackFunc);
?? 它對應(yīng)的url請求為
?? /json.jsp?objectName=XXObject&objectEvent=XXEvent&...
對于同樣的后臺業(yè)務(wù)處理,我們可以自由的選擇渲染模板,則可以很自然的得到更多的處理方式,例如返回javascript代碼來實現(xiàn)對于前臺的回調(diào)。
? 在服務(wù)器端生成頁面片斷的方式也稱為AJAH,表面上看起來它比AJAX要簡易一些,是很多服務(wù)器端框架引入AJAX概念的鄉(xiāng)間小徑。但有趣的是在基于拉模式(pull mode)的服務(wù)器端MVC框架中,AJAH是在架構(gòu)上比AJAX更加靈活的一種方式。在witrix平臺的jsplet框架中,web訪問的基本形式如下:
?? /view.jsp?objectName=XXObject&objectEvent=XXEvent&otherArgs&tplPart=XXPart
其中objectName對應(yīng)于后臺的服務(wù)對象,objectEvent參數(shù)映射到服務(wù)對象的方法,view.jsp是對于后臺對象進(jìn)行渲染的模板頁面,而tplPart參數(shù)可以指定只使用模板的某一部分進(jìn)行渲染。如果我們選擇json.jsp或者burlap.jsp作為渲染模板,則可以退化到返回數(shù)據(jù)而不是內(nèi)容的方式。在js中進(jìn)行簡單的封裝后我們可以通過如下方式進(jìn)行遠(yuǎn)程調(diào)用:
? new js.Ajax().setObjectName("XXObject").setObjectEvent("XXEvent").addForm("XXFormId").callRemote(callbackFunc);
?? 它對應(yīng)的url請求為
?? /json.jsp?objectName=XXObject&objectEvent=XXEvent&...
對于同樣的后臺業(yè)務(wù)處理,我們可以自由的選擇渲染模板,則可以很自然的得到更多的處理方式,例如返回javascript代碼來實現(xiàn)對于前臺的回調(diào)。