我想让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变量在客户端和服务器上共存,对吧?
答案 0 :(得分:1)
在页面加载时计算构面。只要您的页面被加载,该构面就不会被重新计算。因此,您的facetName将不会更新。按设计工作。 switchFacet加载所有构面名称,但仅渲染所选构面名称。
当您在URL处按Enter键时,您将获得该页面的新实例(使用新的viewScope),而按钮执行页面刷新(相同的viewScope),因此不会重新计算facetName。
switchFacet的创建是为了完全适应您的用例,因为现有的facet功能无法覆盖它。