|
1、java的方法避免用 java 和 javascript的關(guān)鍵字。 如 try()方法 或 delete()方法。 2、在你的java類中不要出現(xiàn)重載 avoid overloaded methods. 3、在生產(chǎn)環(huán)境下,你可以把deprecated.js engine.js util.js 合并成一個(gè),并放到web容器內(nèi),直接在htm,jsp中引用。 (對(duì)于java代碼轉(zhuǎn)換成的javascript代碼也可以這么做,免得每次生成javascript代碼浪費(fèi)時(shí)間) 4、研究一下Bean Converters。POJOjava對(duì)象必須嚴(yán)格按照 getProperty() setProperty()定義。Bean Converters是按照 java對(duì)象的 get set方法工作的。DWR1.1加了Object Converters,是按private int property;這類屬性工作的。 <convert converter="bean" match="example.Fred"/> <param name="exclude" value="property1, property2"/> </convert> 當(dāng)你這樣配置時(shí),java對(duì)象轉(zhuǎn)化成的javascript對(duì)象不包括property1和property2。 <convert converter="bean" match="example.Fred"/> <param name="include" value="property1, property2"/> </convert> 反過來java對(duì)象轉(zhuǎn)化成的javascript對(duì)象直包括property1和property2。 5、<convert converter="collection" match="java.util.Collection"/> <convert converter="map" match="java.util.Map"/> 這也是容易出問題的地方. 如 package example; public class Person{ private String name; get ... set private List relationPerson; public List setRelationPerson(List relationPerson){ this.relationPerson=relationPerson; } } <convert converter="bean" match="example.Person"/> </convert> <signatures> <![CDATA[ import java.util.Set; import example.Person; Person.setRelationPerson(List<Person>); ]]> </signatures> 在jdk1.5泛型中有寫法區(qū)別 6、另外在Set,List等做為方法參數(shù)時(shí)也會(huì)出現(xiàn)混淆。返回集合類型不會(huì)出現(xiàn)問題,想想就知道了。 如 在Test類中有 public Set testBeanSetParam(Set test) 這個(gè)方法,客戶端得到的javascript方法可能是Test.testBeanSetParam(p0,callback);當(dāng)我們javascript調(diào)用這個(gè)方法時(shí),鬼才知道怎么確定p0的類型,也不可能知道Set集合中該放什么類型的java對(duì)象,所以dwr的 special signatures syntax 確定這些集合和內(nèi)容的類型 <signatures> <![CDATA[ import java.util.Set; import example.Test; Test.testBeanSetParam(Set<TestBean>); <!--Test.stringStringMapParam(Map<String, String>);--> ]]> </signatures> 7、Creators <allow> <create creator="..." javascript="..." scope="..."> <param name="..." value="..."/> <auth method="..." role="..."/> <exclude method="..."/> <include method="..."/> </create> ... </allow> 為了更少的暴露業(yè)務(wù)方法,最好配置include屬性。 dwr支持new ,script,struts....幾種集成方法,也支持static方法的調(diào)用,我覺得最好的是spring,其他感覺是處理遺留問題處理。 8、engine_js 作為dwr框架客戶端核心,主要完成xmlHttp或iframe的構(gòu)造,我們沒必要關(guān)心它如何實(shí)現(xiàn)。有幾點(diǎn)創(chuàng)新的我們可以學(xué)習(xí)下。 Call Batching 我們可以把幾個(gè)客戶端請(qǐng)求一起放送到服務(wù)器端,減少了網(wǎng)絡(luò)交互,但要注意依存關(guān)系和他們處理的順序。 Call Ordering 同步異步調(diào)整。一般用默認(rèn)的就好了。注意依存關(guān)系。 Remoting Hooks 鉤子,"small AOP" 依存關(guān)系解釋。 如果 request1() request2()兩個(gè)業(yè)務(wù)邏輯方法,request2方法需要用到request1方法從服務(wù)器端返回的結(jié)果。如果調(diào)用request2時(shí),request1還沒處理或還沒請(qǐng)求。 下拉框連動(dòng)可能有這個(gè)問題。 9、util.js propotype.js有些重復(fù),這讓我很難受。只能改代碼了,可別壞了開元協(xié)議。 10、如果你的回調(diào)方法想加其他參數(shù) var dataFromBrowser = ...; var callbackProxy = function(dataFromServer) { callbackFunc(dataFromServer, dataFromBrowser); }; var callMetaData = { callback:callbackProxy }; Remote.method(params, callMetaData); 11、dwr1.1 1.1只能算一個(gè)bug消除版本,沒有什么大的功能調(diào)整。源代碼結(jié)構(gòu)做了些調(diào)整。2.0有新的特征加入。 It has a far broader scope; the major new features are accessibility enhancements, and what now appears to be called ‘Comet‘. 在文檔中提到了“Comet”,估計(jì)與DWR2.0作者想法類似。 http://forum./viewtopic.php?t=19089 樓主叫server push。 http://alex./?p=545 給正名了,叫 Comet |
|
|