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