我正在将公司网页转换为新的xpage平台。它由许多特定于部门的数据库组成,每个数据库都有独立的ACL和旧的表单和文档,一个新的xpage db前端显示来自其他数据库的数据只读。内容是与组织其他部门相关的法规和资源。
该设计仅包含一些自定义控件,这些控件通过各个部门特定的xpages上的属性动态收集数据源。所以像30个xpages一样从单独的数据库收集数据,利用同样少数cc
我的范围变量问题与我的cc_dataViewLocal有关。此dataView显示源db中相应视图的文档。为了让用户知道他们在应用程序中的当前位置,我将拉出当前视图的名称,并在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
答案 0 :(得分:1)
再次感谢您指出我正确的方向。问题显然是我以某种方式擦除了sessionScope,确切地说我仍然不知道。
但通常情况下,解决方案是做其他事情以完成同样的事情......
我发现不起作用: - 将事件移动到onClientLoad没有工作,它抛出异常“无法处理”。另外我的原始方法afterPageLoad也没有真正工作,因为它没有正确更新,因为其他dataViews是通过页面上的Navigator选择的。通过simpleAction列表上的“Set”选项设置变量也是一个问题。我得到了几个“不允许设置只读计算表达式的值”
我做了哪些工作: - 我设置的值不是“Set”简单操作,而是“Excecute script”和代码 sessionScope.ksView = context.getSubmittedValue()。这在导航器中的onClick事件中选择要在DataView xpage上显示哪个Dataview然后,SessionScope一直保持活动状态,直到documentDisplay xpage,直到在DataView xpage上的Nav中选择了另一个Dataview。
现在使用相同的sessionScope作为xpage上的viewName属性我最初在afterPageLoad上设置sessionScope,以便在首次打开页面时具有默认值...
再次感谢,这里有很多关键词,但这就是你从中学到的东西: - ))