官方要理解dwr.xml
假如我在項(xiàng)目的BUS
前面我們提到,DWR講到這里,我們現(xiàn)在重新回到dwr.xmlcreate creator="spring" javascript="DepartmentBus" scope="script">
<param name="beanName" value="departmentBus"/>
create>
Creator包中找到一個(gè)的文件。在該文件下的中可以看到。
是用于你在中調(diào)用這個(gè)對(duì)象時(shí)使用什么名稱,強(qiáng)烈建議你使用首字母大寫,這樣在頁面中很容易看出這是一個(gè)與后臺(tái)對(duì)應(yīng)的對(duì)象。如果你使用了并且在中選擇了,那么你需要一個(gè)叫的參數(shù),而其值就是在配置文件中配置的,如。另外個(gè)非常有用的參數(shù)是和,可以禁止頁面調(diào)用后臺(tái)的某個(gè)或某些方法,具體的寫法是在中加入:exclude method="createDepartment"/>
method部分寫的是這些方法不帶括號(hào)的方法名,如果有多個(gè)就寫多行;則規(guī)定頁面只能調(diào)用某些方法。
在dwr.xmlconvert match="com.htxx.demo.datasource1.model.Department"
javascript="Department" converter="hibernate3"/>
match用于告訴
如果你使用后一種方法去批量注冊(cè)對(duì)象,那么你就不能這樣初始化這個(gè)對(duì)象而只能這樣手動(dòng)注冊(cè):
Var dep = {departmentId:null, departmentName:null, ……};
我推薦大家采用第一種方法的好處可以在我后面寫的《DWR幫助說明-如何編寫通用的單行編輯框DWR幫助說明-dwr的bug及其解決方法首字母大寫。Converter用于告訴用什么的類來執(zhí)行轉(zhuǎn)換,常用的轉(zhuǎn)換器有、、、等。有哪些轉(zhuǎn)換器可以在的(該文件的位置見前文)中找到。我需要強(qiáng)調(diào)的是,如果朋友們使用了,那么你需要將需要使用的所有值對(duì)象都通過轉(zhuǎn)換器注冊(cè)。但是我在網(wǎng)上看見很多朋友都使用轉(zhuǎn)換器來注冊(cè)。如果你使用來轉(zhuǎn)換值對(duì)象,在運(yùn)行程序的時(shí)候會(huì)出現(xiàn)很多問題(這些問題我就不詳述了),同時(shí)還會(huì)出現(xiàn)效率的問題,因?yàn)?/span>會(huì)將該值對(duì)象的所有屬性,及其這些屬性的所有屬性,所有屬性的屬性,都以窮舉的方式取出來。熟悉的朋友應(yīng)當(dāng)馬上明白這樣將是數(shù)據(jù)庫操作的一個(gè)災(zāi)難。如果你使用或作為轉(zhuǎn)換器將不會(huì)發(fā)生這樣的事,同時(shí),還較好地解決了延遲查詢的問題,但官方建議我們使用的,這我也不再詳述,不清楚的朋友可以查閱的幫助文檔。但另一個(gè)問題我不得不提,在使用延遲查詢的時(shí)候其實(shí)還是有問題的。譬如有一個(gè)值對(duì)象包含一個(gè)的屬性,根據(jù)延遲查詢的規(guī)則,在某個(gè)時(shí),屬性不會(huì)馬上裝載,即使執(zhí)行也不會(huì)裝載。必須到真正對(duì)這個(gè)操作的時(shí)候才會(huì)裝載。既然如此,問題就來了,我們使用執(zhí)行查詢的時(shí)候,常常是真正到頁面才會(huì)讀取,這時(shí)已經(jīng)是脫離服務(wù)器端到頁面端了而不能再得到。這個(gè)問題怎么辦呢,最好的辦法是在服務(wù)器端就提前裝載頁面需要使用的屬性,因?yàn)樽鳛殚_發(fā)者他肯定知道哪些屬性要在客戶端使用,哪些屬性不需要。至于如何在服務(wù)器端就提前裝載,感興趣的朋友在我的示例中看到。另外一個(gè)需要提的是,與一樣,轉(zhuǎn)換器也可以一樣地設(shè)置和參數(shù)。但是與不同的是,它們說明在轉(zhuǎn)換對(duì)象的時(shí)候需要轉(zhuǎn)換或不轉(zhuǎn)換某些屬性。這個(gè)參數(shù)對(duì)于的一對(duì)一關(guān)聯(lián)非常重要。在中一對(duì)一關(guān)聯(lián)是不做延遲查詢的,假如有一個(gè)值對(duì)象與值對(duì)象是一對(duì)一關(guān)聯(lián),那么中有的屬性,而中有的屬性。由于一對(duì)一關(guān)聯(lián)不做延遲查詢,當(dāng)在轉(zhuǎn)換一個(gè)是會(huì)裝載它的屬性,然后在裝載的時(shí)候,又會(huì)去裝載中的屬性。如此這樣,就會(huì)形成一個(gè)死循環(huán),最后以堆棧溢出告終。解決這個(gè)問題的辦法就是禁掉中的屬性,避免產(chǎn)生死循環(huán)。具體寫法如下:
xml 代碼
- <convert match="com.htxx.demo.model.Address" javascript="Address" converter="hibernate3">
- <param name="exclude" value="employee"/>
- </convert>
Value部分是需要轉(zhuǎn)換的屬性,如果有多個(gè)則用逗號(hào)隔開就可以了。(一個(gè)dwr+spring+hibernate的示例)