ZK Demo 会话超时(session timeout)设定详解

原来只是一个小设定

官方文档
http://books.zkoss.org/wiki/ZK_Configuration_Reference/zk.xml/The_session-config_Element#The_timeout-message_Element

会话超时元素 (The session-timeout Element)

[默认: 0 _(根据网页服务器)_]

这个设定可以在客户端送出多个请求之间,指定会话有效的秒数。若指定负数则会话永不失效

默认0秒则使用zk缺省值(定义在/WEB-INF/web.xml中)。

超时讯息元素 (The timeout-message Element)

[可选择的]
[5.0.5 开始]
[默认: _定义在 [MZk.UPDATE_OBSOLETE_PAGE](http://docs.zkoss.org/wiki/Msgzk.properties "http://docs.zkoss.org/wiki/Msgzk.properties") 的讯息_]


指定会话超时後提示的讯息。本设定只有当timeout-uri没被设定才会生效。

<session-config>
    <device-type>ajax</device-type>
    <timeout-message>Session timeout. Please reload.</timeout-message>
</session-config>



国际化

如果你想要指定一个根据地区提示的讯息,你可以指定前缀label接着:key如下

<session-config>
    <device-type>ajax</device-type>
    <timeout-message>label:timeout</timeout-message>
</session-config>



然後你必须要准备i3-Label 文件,参考 ZK Developer’s Reference.


#默认i3-label.properties
#中文i3-label_zh_CN.properties
#可允许多行讯息
timeout={
会话超时,请重整页面
}


JavaScript

你可以提供JavaScript代码来取代默认的讯息对话。只要指定前缀script,客户端会直接直接执行你所设定的代码。

例子,你有一个function叫做foo.timeout用来处理超时之後的效果。你可以设定zk.xml如下


<session-config>
    <device-type>ajax</device-type>
    <timeout-message>script:foo.timeout('Session Timeout')</timeout-message>
</session-config>

这段代码必须为Javascript。

这是zkdemo超时之後的回应(大概 半小时)

拆包一下

script:
  $("#z-timeout").remove();
  $('body').append('<div id="z-timeout"><span>Timeout, <b>move mouse</b> to refresh...<img src="/zkdemo/images/refresh2.gif" style="display:none;"/></span></div>');
  $("#z-timeout").slideDown(1000);
  $('body').mouseover(function() {
    $("img","#z-timeout").show();
    $('#container > div:gt(0)').fadeOut(1000);
    setTimeout("location.reload()", 1500);
  });

zk.xml (推测)

**<timeout-message>**script:<![CDATA[
  $("#z-timeout").remove();
  $('body').append('<div id="z-timeout"><span>Timeout, <b>move mouse</b> to refresh...<img src="/zkdemo/images/refresh2.gif" style="display:none;"/></span></div>');
  $("#z-timeout").slideDown(1000);
  $('body').mouseover(function() {
    $("img","#z-timeout").show();
    $('#container > div:gt(0)').fadeOut(1000);
    setTimeout("location.reload()", 1500);
  });
]]>**</timeout-message>**

贴个效果