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

XPages xsp.session.transient当设置为true时,分层选项卡式导航停止工作,xpages,Xpages,我基本上是在试图理解XPages的xsp属性。我参考了多个网站,发现了一个理解xsp.session.transient属性的小问题 本博客()声明: “此标志表示将为服务器的每个请求创建唯一的会话对象,并在请求结束后立即丢弃” 当我查看这个blog()时,它说将其设置为true可能会导致对象丢失。当我在页面上使用选项卡式导航时,我观察到了这种副作用。下面提到的代码只会刷新第二个层次选项卡,而不会转到第三个层次。如果我将该属性设置为false,则效果良好。但是,我想了解这种行为的原因是什么?此外

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

本博客()声明:

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

当我查看这个blog()时,它说将其设置为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>

A.
B
C
D
E
F

xsp.session.transient属性记录在中

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

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

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

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


在阅读文档时,如果
xsp.session.transient
设置为
true
,则不会在请求之间保留对象的状态


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

谢谢您的介绍。所以,首先,我明白你在最后一段的第二句中的意思是“真的”,对吗?另外,如果我理解正确,那么选项卡式导航会对页面执行完全刷新,因此对象不会在多个请求之间存储?对吗?在这种情况下,我想知道为什么选项卡式导航会执行完全刷新,而它可以通过部分刷新来完成?(因为,在这种情况下,即使我将属性设置为true,它也会工作)。False更改为true:-)谢谢没有问题。。另外,很高兴听到你关于我评论的第二部分。。!将transient设置为true意味着在请求之间不保留对象-这意味着它也会影响部分刷新(据我所知)。我问您的原因是,您在最后第三段提供的描述中建议:“这确保了XPage仍然可以为作用域变量和操作的部分执行提供丰富的用户体验。”。无论如何,我得出的结论是,如果我们在任何情况下(部分或完全刷新)将属性设置为true,它将因状态未存储而崩溃。感谢您宝贵的评论:)