Javascript 使用SessionScope变量选择DynamicContent

Javascript 使用SessionScope变量选择DynamicContent,javascript,xpages,dynamic-controls,Javascript,Xpages,Dynamic Controls,在XPage上,我有一个导航器,它根据所选项目设置sessionScope变量。然后我在SwitchFacet中使用该值来显示几个不同视图中的一个。这很好,但我知道switchFacet为所有视图加载整个树,其中作为dynamicContent控件,仅为选定面板加载树。因此,我使用以下代码在XPage上的panelAll中创建了dynamicContent控件(导航器对panelAll onClick进行部分重新查看): <xp:panel id="panelAll" style="wid

在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>

getComponent(“dynamicContent1”).show(sessionScope.get(“ssSelectedView”);

问题是视图不会像SwitchFace那样改变。我知道sessionScope变量id设置正确,onClick部分刷新应该是刷新panelAll并选择另一个面板加载,但它只显示vwProfile视图。我还需要做些什么来使动态contentwork?

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

我使用该解决方法将“dynamic contect”片段放入自定义控件中,并根据sessionScope变量的状态使用它们的
rendered
属性来显示它们


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

您必须调用
dynamicContent.show(“YourFaceName”)
。这种方式对我有效。我使用部分刷新(和部分执行模式),但我调用
.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>


Cool,我没有意识到这一点:-)我认为问题在于onClick事件位于dynamicControl内部,因为在我的示例中,我也在dynamicContent内部调用getComponent().show(sessionScope),但部分刷新来自外部(即我的导航器)。正如Julian所说,似乎您需要完全刷新才能刷新dynamicContent。因此,如果最终用户不打算在这个方面采取任何行动,我看不出如何使用dynamicContent。switchFacet控件,或者在许多自定义控件上使用rendered属性都是有效的,但是它们都加载了整个树,正如我所理解的那样,因此从这个角度来看,它们不是真正有效的。但是他们工作!我让switchFacet使用这个方法,但是我想我会转到dynamicContent,因为它应该更有效,但是完全刷新似乎也不是一个真正有效的过程。关于switchFacet和渲染面板之间的性能差异有什么想法吗?我刚刚构建了两个中等复杂的应用程序,每个应用程序只有一个XPage和大约20-30个自定义控件,这些控件的渲染取决于sessionScope变量和部分更新。一些控件包含notes视图,其他控件包含带有许多选项卡的表单,等等。它的速度非常快,用户体验非常好。我有动态内容工作。我将getComponent().show移动到导航器的onClick中,然后部分刷新工作。我的onClick执行以下操作:getComponent(“dynamicContent1”).show(context.getSubmittedValue());返回sessionScope.put(“ssSelectedView”,context.getSubmittedValue());