XPages xsp.session.transient设置为true时,分层选项卡导航停止工作



我基本上试图理解XPages的xsp属性。我参考了多个网站,发现了一个小问题来理解xsp.session。瞬态属性。

这个博客(http://www.mindoo.com/web/blog.nsf/dx/17.07.2011101855KLEBRW.htm?opendocument&comments)声明:

"此标志表示将为每个请求创建唯一的会话对象,并在请求结束后立即丢弃"

当我查看这个博客(http://www.itwu-demo.net/web/itwublog.nsf/default.xsp?documentId=E42CD391498BDE9CC1257A770040B2EB)时,它说将其设置为true可能会导致对象丢失。当我在页面上使用选项卡导航时,我观察到了这个副作用。下面提到的代码只会刷新第二个层次选项卡,永远不会转到第三个层次。如果我将属性设置为false,它就会正常工作。但是,我想知道这种行为的原因是什么?另外,财产究竟如何为我们的利益而使用?谁能给我点光。谢谢。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:tabbedPanel id="tabbedPanel1">
        <xp:tabPanel label="New Tab" id="tabPanel1">a</xp:tabPanel>
        <xp:tabPanel label="New Tab2" id="tabPanel2">b<xp:br></xp:br>
            <xp:tabbedPanel id="tabbedPanel2">
                <xp:tabPanel label="New Tab" id="tabPanel3">c</xp:tabPanel>
                <xp:tabPanel label="New Tab2" id="tabPanel4">d<xp:br></xp:br>
                    <xp:tabbedPanel id="tabbedPanel3">
                        <xp:tabPanel label="New Tab" id="tabPanel5">e</xp:tabPanel>
                        <xp:tabPanel label="New Tab2" id="tabPanel6">f</xp:tabPanel>
                    </xp:tabbedPanel>
                </xp:tabPanel>
            </xp:tabbedPanel>
        </xp:tabPanel>
    </xp:tabbedPanel>
</xp:view>

xsp.session.transient属性记录在XPages Portable Command Guide书中。

以下是摘自该书的属性摘要:

默认情况下,XPages运行时是一个有状态web应用程序框架。对XPage的请求会导致一定程度的服务器端处理,从创建或检索用户会话开始,最终以构建响应内容的呈现过程结束。在此服务器端处理期间,用户会话配置对象以及所请求的XPage上的所有控件将其各自的属性和值序列化到磁盘和/或从磁盘反序列化。这是由于XPages的内置序列化机制管理并提供了XPages运行时的有状态特征。根据应用程序需求,从性能和可伸缩性的角度来看,不参与此序列化过程的应用程序可能有利于优化其参与级别。xsp.session.transient属性的目的是提供一种方法来控制如何在请求之间序列化用户会话对象。

默认情况下,XPages运行时将此属性设置为false。因此,序列化过程包括所有用户会话对象,但不包括sessionScope对象。这意味着在用户会话对象的生命周期内,给定用户请求的任何xpage都将与用户会话对象关联地进行序列化/反序列化。当整个用户会话超时时间过去时,它们将与用户会话对象一起被丢弃。

或者,如果将此属性设置为true, XPages运行时将自动避免在XPage请求之间序列化用户会话对象。注意这一点很重要用户会话对象仍然为请求实例化,但在请求之间不进行序列化。这也意味着所请求的XPage中的控件的属性和值仍然参与序列化过程—这确保了XPage仍然可以为作用域变量和部分操作的执行提供丰富的用户体验。但是,当用户导航到另一个XPage时,该XPage的相关状态数据将被丢弃,因为用户会话对象没有在请求之间序列化。此功能可用于需要极其优化的性能调优级别的用例,其中必须对服务器内存进行精细管理。请注意,这些用例是那些只对当前页面应用部分更新的用例;整页刷新会导致在请求之间丢弃状态。因此,页面的设计和意图需要仔细考虑从这个特性中获益。


正如您从文档中读到的,如果将xsp.session.transient设置为true,则对象的状态不会在请求之间保留。

我强烈推荐购买《XPages Portable Command Guide》

最新更新