0

在 XPage 上,我有一个导航器,它根据所选项目设置 sessionScope 变量。然后我在 SwitchFacet 中使用该值来显示几个不同视图之一。这很好用,但我知道 switchFacet 会为所有视图加载整个树,其中作为 dynamicContent 控件仅加载所选面板的树。因此,我使用以下代码在 XPage 上的 panelAll 内创建了一个 dynamicContent 控件(Navigator 对 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 视图。我还需要做些什么来使动态内容正常工作吗?

4

2 回答 2

1

不幸的是,dynamicContent 控件不适用于部分更新,只能完全重新加载页面。几个月前我尝试过同样的方法,但它也对我不起作用。

我使用解决方法将我的“动态内容”放在自定义控件中,rendered并根据 sessionScope 变量的状态使用它们的属性来显示它们。

它并不完美,因为 XPages 引擎的树中始终包含所有自定义控件的所有内容,但对于中等复杂的应用程序来说还可以。

于 2013-10-18T05:37:41.190 回答
1

你必须打电话dynamicContent.show("yourFacetName")。这种方式对我有用。我正在使用部分刷新(和部分执行模式),但我是.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>
于 2013-10-18T06:04:00.733 回答