我正在将公司网页过渡到新的xpage平台。它由多个部门特定的数据库组成,每个数据库都有各自的ACL(带有旧表格和docs),以及一个新的xpage数据库前端,用于显示其他数据库的只读数据。内容是与组织其他部分相关的法规和资源。

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

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

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

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

</xp:text>


来自所有数据库的所有文档都使用具有动态文档数据源的相同documentDisplay xpage呈现。因此,此xpage没有任何属性,但是通过数据视图xpage引用:

<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的数据视图中打开文档时,我也希望显示在其中的原始视图具有相同的标题/名称。为此,我尝试在数据视图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开始,尝试了相同的请求和会话。我想念什么?

任何输入,不胜感激!包括解决方法,但想掌握范围内的变量... :-)

对于所有阅读此篇较长文章并预先表示感谢的人!

维达尔·索莱瓦(Vidar Solevag)

最佳答案

再次感谢您指出正确的方向。问题显然是我以某种或其他方式抹去了sessionScope,而这仍然是我仍然不知道的方式。

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

我发现不起作用:
-将事件移到onClientLoad上不起作用,它引发了“无法处理”异常。另外,我的原始方法afterPageLoad也不起作用,因为它无法正确更新,因为通过页面上的导航器选择了其他dataView。通过simpleAction列表上的“设置”选项设置变量也被认为是一个问题。我得到了几个“不允许设置只读计算表达式的值”

我所做的工作很有效:
-我不是通过“设置”简单操作来设置值,而是通过“执行脚本”和代码来设置值
sessionScope.ksView = context.getSubmittedValue()。这在导航器中的onClick事件中,该事件选择要在DataView xpage上显示的数据视图。然后,SessionScope一直保持活动状态,直到documentDisplay xpage,直到在Nav中回到DataView xpage上选择了另一个Dataview。

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

再次感谢您,这里的墙头很多,但这就是您从我那里学到的东西:-))

09-05 03:13