頁面是特殊的組件,按照組成,它有一個規范,嵌入的組件,assets,和HTML模板。
?
頁面沒有參數,因為他們是組件的最外層。
?
所有的組件,不管他們嵌套多深,都有一個頁面參數指向他們所依賴的頁面組件。頁面有一個引擎參數指向當前所依賴的引擎。
?
頁面在一個池中被共享,所以在同一個web程序下頁面的單個的實例能提供給多個會話使用。甚至大量的客戶端會話請求時,池也會產生少量頁面實例的來處理請求。池機制使得頁面實例化的數量在處理并發的情況下實例化最少頁面。
?
頁面可能有持久狀態,對于不同的用戶,參數在請求周期內保持特定的值,這些參數駐留在HttpSession中。頁面狀態和頁面實例是完全分離的。為了處理并發的請求,一個不同的Page從池內被創建來處理請求,事實上,in a clustering environment, the request may be serviced by an entirely different server.
Tapestry有效的明顯的隱藏了這些細節;當程序的任何一部分請求一個頁面,池收回一個實例,這個實例保持先前被一個用戶已經賦值并持久化。
?
“持久”,從語文的角度來講,我理解為在某段時間內不變就是持久。在這里應該指的是HttpSession周期。
?
事實上,任何組件可能有持久狀態,使用Pages意味著記錄那個狀態。
?
引擎是一個session持久化對象。
?
visit對象是引擎對象的一個屬性,序列化。
?
Pages不是session持久化的,它們只存在java VM的內存中,第一次創建,Pages和組件不需要實現java.io.Serializable接口。
?
The application engine 可以總是實例化一個新的頁面實例并別重置它之前記錄的狀態(被記錄的狀態信息被序列化到引擎上了)。
?