ZK 中除了提供 Java EE 標準的共享範圍: application
, session
, request
之外,還提供 desktop
跟 component
範圍。你可透過相對應的範圍物件並呼叫 setAttribute(key, value)
把資料存進去,並在同一個範圍內透過 getAttribute(key, value)
把資料取出來,是很常見的資料傳遞、分享方法。存資料在恰當的範圍,才能共享資料給適當的對象,也不會影響別人的狀態,或產生不必要的垃圾資料。簡介一下 ZK 才有的範圍 (scope):
desktop
: 大部份情形你可以把這個範圍看作是一個瀏覽器的 tab,同一個 tab 下的元件都屬於同一個 desktop。每次重新載入 (reload) 頁面會重新產生一個新的 desktop。component
: 要取得該元件的 reference 才能取得其上的資料,通常是用來存該元件才會使用的暫存資料。execution
: 這是 ZK 的名詞,指得其實就是 request。只是因為 ZK 要求 zul 的 HTTP request 跟透過 AJAX 發的 HTTP request (通常是 event)有不同的處理方式,但是要通用化兩者,畢竟都是 HTTP request, 就用Execution
物件封裝兩種不同的 request。
建議用法如下:
- 只使用足夠的、最小的範圍共享。如果可以透過 desktop 共享,就不要透過 session。
- 使用 ZK 開發時,一般會將多個相關的功能實作在同一頁 (這也是使用 AJAX 開發應用程式的常態),所以大部時候,跟頁面相關的資料只需要存在 desktop 範圍就夠了。如果存在 session ,要注意其會影響所有同一個瀏覽器下的 tab。
- 要注意使用 application 及 session scope 的 event queue 會自動啟動 server push。
留言