Variables Xpages作用域变量在打开下一页时丢失

Variables Xpages作用域变量在打开下一页时丢失,variables,xpages,session-scope,Variables,Xpages,Session Scope,我正在将一个公司网页转换为一个新的xpage平台。它由许多特定于部门的数据库组成,每个数据库都有单独的ACL,其中包含旧表单和文档,以及一个新的xpage db前端,该前端显示来自另一个db的只读数据。内容是供组织其他部门参考的法规和资源 该设计只包含几个自定义控件,这些控件通过各个部门特定XPage上的属性动态收集数据源。因此,就像30个xpages使用同一批cc从单独的数据库收集数据一样 我的作用域变量问题与我的cc_dataViewLocal有关。此数据视图显示源数据库中相应视图中的文档。

我正在将一个公司网页转换为一个新的xpage平台。它由许多特定于部门的数据库组成,每个数据库都有单独的ACL,其中包含旧表单和文档,以及一个新的xpage db前端,该前端显示来自另一个db的只读数据。内容是供组织其他部门参考的法规和资源

该设计只包含几个自定义控件,这些控件通过各个部门特定XPage上的属性动态收集数据源。因此,就像30个xpages使用同一批cc从单独的数据库收集数据一样

我的作用域变量问题与我的cc_dataViewLocal有关。此数据视图显示源数据库中相应视图中的文档。为了让用户知道他们在应用程序中的当前位置,我拉入当前视图的名称,并在DataView xpage上以标题形式显示数据视图上方的名称:

<xp:text escape="true" id="computedField1" styleClass="ksHeading2">

<xp:this.value><![CDATA[#{javascript:getComponent("dataView1").getData  ().getView()
 }]]></xp:this.value>

</xp:text>
<xe:dataView id="dataView1" collapsibleCategory="false"

rows="50" style="font-size:8pt" rowStyle="font-size:8pt"

collapsibleDetail="true" pageName="/**ks_documentDisplay.xsp**"

var="rowHandle">

所有数据库中的所有文档都使用相同的documentDisplay xpage和动态文档数据源显示。因此,此xpage没有任何属性,但通过数据视图xpage引用:

<xp:text escape="true" id="computedField1" styleClass="ksHeading2">

<xp:this.value><![CDATA[#{javascript:getComponent("dataView1").getData  ().getView()
 }]]></xp:this.value>

</xp:text>
<xe:dataView id="dataView1" collapsibleCategory="false"

rows="50" style="font-size:8pt" rowStyle="font-size:8pt"

collapsibleDetail="true" pageName="/**ks_documentDisplay.xsp**"

var="rowHandle">

--

当我在documentDisplay.xsp中从数据视图打开文档时,我希望在那里显示与原始视图相同的标题/名称。为了实现这一点,我尝试在data view xpage中的afterPageLoad事件中捕获作用域变量中的视图名称,以便在documentDisplay xpage中重新显示它

<xp:this.afterPageLoad>

<xp:setValue binding="#{sessionScope.ksView}">

<xp:this.value><![CDATA[#{javascript:getComponent   
 ("computedField1").value}]]  ></xp:this.value>

</xp:setValue>

</xp:this.afterPageLoad>

毕竟,视图名称不是文档数据源的一部分,正如我所看到的,此时我没有父视图的其他句柄

--

当我在dataView xpage的计算字段中显示作用域变量时,它工作正常:

<xp:text escape="true" id="computedField2"

styleClass="ksHeading1" value="#{sessionScope.ksView}">

但是,当我尝试使用相同的计算字段编码在documentDispay xpage中显示相同的会话变量时,结果显示为空。sessionVariable是否会丢失到下一个xpage

我从一个viewScope开始,尝试了请求和会话,结果相同。我错过了什么

非常感谢您的任何意见!包括变通方法,但希望掌握作用域变量…:-)

向所有阅读这篇有点长的帖子的人致意,并提前表示感谢

维达索莱瓦格


再次感谢您为我指明了正确的方向。问题很明显是我以某种方式擦除了会话范围,确切地说,我仍然不知道如何擦除

但通常情况下,解决办法是做其他事情来完成同样的事情

我发现不起作用的地方: -将事件移动到OnClient Load不起作用,它引发了一个异常“无法处理”。此外,我最初的方法afterPageLoad也没有真正起作用,因为它没有正确更新,因为其他数据视图是通过页面上的Navigator选择的。通过simpleAction列表上的“Set”选项设置变量也是一个问题。我得到几个“不允许设置只读计算表达式的值”

我所做的一切奏效了: -我不是通过“设置”简单操作设置值,而是通过“超级脚本”和代码设置值 sessionScope.ksView=context.getSubmittedValue()。这将在导航器中的onClick事件中发生,该事件选择要在Dataview xpage上显示的Dataview,然后会话范围在documentDisplay xpage中一直保持活动状态,直到在Dataview xpage上的Nav中重新选择另一个Dataview

现在使用与xpage上的viewName属性相同的sessionScope,我还将最初在afterPageLoad上的sessionScope设置为首次打开页面时的默认值


再次感谢您,这里有很多令人头痛的事情,但我想这就是您从中学到的:-)

是否“数据视图xpage”(或自定义控件)也以某种方式加载到了“documentDisplay”xpage上?我认为“afterPageLoad”部分代码是在“documentDisplay”Xpage中触发的,因此清空sessionScope变量。SessionScope变量在导航到另一个页面时不会丢失。我支持@Ferry所说的。我认为您正在覆盖sessionScope变量。如果当前值为空,您可以更改它,以便只设置该值。Vidar,无需为您的问题长度道歉。这有助于充分解释您的问题。通常问题不会提供足够的信息。谢谢你们两位的意见!感谢你们@Ferry和@Steve的投入!数据是从另一个数据库收集的,而不是从两个xpages和cc所在的数据库收集的,这会是一个问题吗?当用户输入另一个dataView XPage时,该变量需要能够更改。我在想,如果来自不同数据库的数据交换消除了变量的管理,那该怎么办?获取跟踪上次访问视图的用户bean?