设置为true时,XPages xsp.session.transient分层标签导航停止工作

时间:2014-03-11 12:45:15

标签: xpages

我基本上是想了解XPages的xsp属性。我已经推荐了多个网站,发现了一个小问题,无法理解 xsp.session.transient 属性。

此博客(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>

1 个答案:

答案 0 :(得分:1)

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

以下是本书摘录的财产摘要:

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

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

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


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

我强烈建议您购买XPage便携式命令指南。