在XPage上,我有一个导航器,可根据所选项目设置sessionScope变量。然后我在SwitchFacet中使用该值来显示几个不同视图中的一个。这很好用,但据我所知,switchFacet为所有视图加载整个树,而dynamicContent控件只加载所选面板的树。所以我使用以下代码在XPage上的panelAll中创建了一个dynamicContent控件(导航器对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>
问题是视图不会像使用switchFacet那样改变。我知道sessionScope变量id设置正确,onClick部分刷新应刷新panelAll并选择要加载的其他面板,但它只显示vwProfile视图。我还需要做些什么来使动态内容有效吗?
答案 0 :(得分:1)
dynamicContent控件不能与部分更新一起使用,只能完全重新加载页面。我几个月前尝试过同样的事情,它对我也没有用。
我使用解决方法将自己的“动态跟踪”部分放在自定义控件中,并根据sessionScope变量的状态使用它们的rendered
属性来显示它们。
它并不完美,因为XPages引擎总是在其树中包含所有自定义控件的所有内容,但它适用于中等复杂的应用程序。
答案 1 :(得分:1)
您必须致电dynamicContent.show("yourFacetName")
。这样它对我有用。我正在使用部分刷新(和部分执行模式),但我从facet内部调用.show()
。我不知道这是否有所作为。像这样:
<xe:dynamicContent id="dynamicContent1"
defaultFacet="read">
<xp:this.facets>
<xp:panel xp:key="read">
<xp:link>
<xp:eventHandler event="onclick"
submit="true" refreshMode="partial" refreshId="tableRow"
execMode="partial" execId="tableRow">
<xp:this.action><![CDATA[#{javascript:var c = getComponent("dynamicContent1");
c.show("edit");}]]></xp:this.action>
</xp:eventHandler>
</xp:link>
</xp:panel>
<xp:panel xp:key="edit">
</xp:this.facets>
</xe:dynamicContent>