Home   Single Page

onClientInfoイベント

アプリケーションはタイムゾーンというようなクライアント情報を知る必要がある場合があります。
そのとき、onClientInfoイベントにイベントリスナを追加します。
イベントが追加されると、クライアントはorg.zkoss.zk.ui.event.ClientInfoEventクラスのインスタンスを返信します。
その返信の内容からクライアントの情報を取得できます。

<grid onClientInfo="onClientInfo(event)">
    <rows>    
        <row>Time Zone <label id="tm"/></row>        
        <row>Screen <label id="scrn"/></row>        
    </rows>    
                
    <zscript>    
    void onClientInfo(ClientInfoEvent evt) {    
        tm.setValue(evt.getTimeZone().toString());        
        scrn.setValue(        
            evt.getScreenWidth()+"x"+evt.getScreenHeight()+"x"+evt.getColorDepth());            
    }    
    </zscript>    
</grid>

【メモ】:onClientInfoイベントはルートコンポーネント(aka.,親コンポーネントがいないコンポーネント)に対してのみ意味があります。

クライアント情報はZKによって保存されることはありません。つまり必要なら、手動で保存しなければなりません。
セッションは同じクライアントに関連しているので、セッションの属性中にクライアント情報を保存するのは一つの方法です。

session.setAttribute("px_preferred_time_zone", event.getTimeZone());

px_preferred_time_zoneと呼ばれるセッションの変数としてタイムゾーンを保存したら、その値はデフォルトのタイムゾーンとして、それ以降使用されます。国際化章中でタイムゾーンセクションを参照してください。

onClientInfoイベントはページが読み込まれた後(そしてクライアントに送信される)クライアントから送信されます。
このため、コンポーネントのデータはタイムゾーンといったクライアント情報しだいなら、以下のようにクライアントにリクエストの再送信をさせなければなりません。

import org.zkoss.util.TimeZones;
...
if (!TimeZones.getCurrent().equals(event.getTimeZone())
    Executions.sendRedirect(null);