如何在xpages中传递var到facet并更新facet?

时间:2014-01-06 21:55:00

标签: custom-controls xpages updating facet session-scope

我想让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>

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

1 个答案:

答案 0 :(得分:1)

在页面加载时计算构面。只要您的页面被加载,该构面就不会被重新计算。因此,您的facetName将不会更新。按设计工作。 switchFacet加载所有构面名称,但仅渲染所选构面名称。

当您在URL处按Enter键时,您将获得该页面的新实例(使用新的viewScope),而按钮执行页面刷新(相同的viewScope),因此不会重新计算facetName。

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