0

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

这是我的 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 是放在 facet 上的自定义组件。而且...具有相同名称的 sessionScope 变量在客户端和服务器上共存,对吗?

4

1 回答 1

1

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

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

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

于 2014-01-08T05:43:31.220 回答