如何在 xpages 中将 var 传递给分面并更新分面



我想制作switchFacet进行练习,但徒劳无功。其实不知道从哪里开始。这只能用java编写吗?这是我的代码。我尝试通过sessionScope传递变量。按钮更新值,但分面不会。如果我单击 URL,然后单击 ENTER,分面会更改值。

这是我的Xpage:

<xc:FacetContainerCC viewPanelTest="#{sessionScope.VarTest}">       
<xp:this.facets>
    <xp:div xp:key="SecondCC"><xc:SecondCC></xc:SecondCC></xp:div>
    <xp:div xp:key="FirstCC"><xc:FirstCC></xc:FirstCC></xp:div>
</xp:this.facets>

<xp:button value="#{javascript:sessionScope.VarTest}" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
    <xp:this.action><![CDATA[#{javascript:if (sessionScope.get("VarTest") ==  "First") 
    sessionScope.put("VarTest", "Second"); else sessionScope.put("VarTest","First");}]]>
    </xp:this.action>
</xp:eventHandler>

还有我的方面:

<xp:callback id="callback1">
<xp:this.facetName><![CDATA[#{javascript:
    var viewPanelTest = sessionScope.get("VarTest");
    if (viewPanelTest == "First") return "FirstCC"; 
    else return "SecondCC";}]]>
</xp:this.facetName>

我注意到逐页更新和重新输入 URL 之间存在差异。按钮发出 POST 请求,重新输入 URL 发出 GET 请求。FirstCC 和 SecondCC 是放在分面上的自定义组件。和。。。会话具有相同名称的 sessionScope 变量在客户端和服务器上共存,对吗?

分面是在页面加载时计算的。只要加载了页面,就不会重新计算分面。因此,您的分面名称将不会更新。按设计工作。switchFacet 加载所有分面名称,但仅呈现选定的分面名称。

当您在URL上按回车键时,您将获得该页面的新实例(具有新的viewScope),而按钮会进行页面刷新(相同的viewScope),因此不会重新计算facetName。

switchFacet 的创建是为了完全适应您的用例,因为现有的分面功能无法涵盖它。

最新更新