在 XPage 上,我有一个导航器,它根据所选项目设置 sessionScope 变量。然后我在 SwitchFacet 中使用该值来显示几个不同 View 之一。这工作得很好,但我知道 switchFacet 加载所有 View 的整个树,而动态内容控件仅加载所选面板的树。因此,我使用以下代码在 XPage 上的 panelAll 内创建了一个动态内容控件(导航器对 panelAll onClick 进行了部分刷新):
<xp:panel id="panelAll" style="width:auto">
<xe:dynamicContent id="dynamicContent1">
getComponent("dynamicContent1").show(sessionScope.get("ssSelectedView");
<xp:this.facets>
<xp:panel xp:key="vwProfile">
<xc:ccProfileView></xc:ccProfileView>
</xp:panel>
<xp:panel xp:key="vwPending">
<xc:ccTransactionView></xc:ccTransactionView>
</xp:panel>
<xp:panel xp:key="vwAgentLog">
<xc:ccAgentView></xc:ccAgentView>
</xp:panel>
</xp:this.facets>
</xe:dynamicContent>
</xp:panel>
问题是 View 不会像 switchFacet 那样改变。我知道 sessionScope 变量 id 设置正确,并且 onClick 部分刷新应该刷新 panelAll 并选择要加载的不同面板,但它只显示 vwProfile View 。我还需要做些什么才能使动态内容发挥作用吗?
最佳答案
不幸的是,dynamicContent 控件不能用于部分更新,只能完全重新加载页面。几个月前我也尝试过同样的方法,但它对我来说也不起作用。
我使用解决方法将我的“动态内容”放入自定义控件中,并使用它们的 rendered
属性根据 sessionScope 变量的状态显示它们。
这并不完美,因为 XPages 引擎始终在其树中包含所有自定义控件的所有内容,但对于中等复杂的应用程序来说是可以的。
关于javascript - 使用 SessionScope 变量选择 DynamicContent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19438223/