http://www.hibernate.org.cn/viewtopic.php?t=16424&postdays=0&postorder=asc&start=0
1、java的方法避免用 java 和 javascript的關(guān)鍵字。 如 try()方法 或 delete()方法。
2、在你的java類(lèi)中不要出現(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;這類(lèi)屬性工作的。
<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>
反過(guò)來(lái)java對(duì)象轉(zhuǎn)化成的javascript對(duì)象直包括property1和property2。
5、<convert converter="collection" match="java.util.Collection"/>
<convert converter="map" match="java.util.Map"/>
這也是容易出問(wèn)題的地方.
如
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泛型中有寫(xiě)法區(qū)別
6、另外在Set,List等做為方法參數(shù)時(shí)也會(huì)出現(xiàn)混淆。返回集合類(lèi)型不會(huì)出現(xiàn)問(wèn)題,想想就知道了。
如 在Test類(lèi)中有 public Set testBeanSetParam(Set test) 這個(gè)方法,客戶(hù)端得到的javascript方法可能是Test.testBeanSetParam(p0,callback);當(dāng)我們javascript調(diào)用這個(gè)方法時(shí),鬼才知道怎么確定p0的類(lèi)型,也不可能知道Set集合中該放什么類(lèi)型的java對(duì)象,所以dwr的 special signatures syntax 確定這些集合和內(nèi)容的類(lè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)用,我覺(jué)得最好的是spring,其他感覺(jué)是處理遺留問(wèn)題處理。
8、engine_js 作為dwr框架客戶(hù)端核心,主要完成xmlHttp或iframe的構(gòu)造,我們沒(méi)必要關(guān)心它如何實(shí)現(xiàn)。有幾點(diǎn)創(chuàng)新的我們可以學(xué)習(xí)下。
Call Batching 我們可以把幾個(gè)客戶(hù)端請(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還沒(méi)處理或還沒(méi)請(qǐng)求。 下拉框連動(dòng)可能有這個(gè)問(wèn)題。
9、util.js propotype.js有些重復(fù),這讓我很難受。只能改代碼了,可別壞了開(kāi)元協(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消除版本,沒(méi)有什么大的功能調(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作者想法類(lèi)似。
http://forum.javaeye.com/viewtopic.php?t=19089
樓主叫server push。
posted on 2006-07-15 10:47
無(wú)聲 閱讀(333)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
職場(chǎng)生活