使用SessionScope变量选择DynamicContent

时间:2013-10-17 22:11:52

标签: javascript xpages dynamic-controls

在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视图。我还需要做些什么来使动态内容有效吗?

2 个答案:

答案 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>