Как передать var в фасет в xpages и обновить фасет?

Хочу сделать 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>

I noticed there is a difference between updating page by button and re-entering URL. Button makes POST request, re-entering URL makes GET request. FirstCC and SecondCC are custom components dropped on facet. And... sessionScope variables with same name co-exists on client and server, right?


person Ermo    schedule 06.01.2014    source источник
comment
Итак, вы пытаетесь продублировать функциональность существующего компонента <xe:switchFacet />?   -  person Tim Tripcony    schedule 07.01.2014
comment
Да, я хочу восстановить switchFacet.   -  person Ermo    schedule 07.01.2014


Ответы (1)


Аспекты вычисляются при загрузке страницы. Пока ваша страница загружена, фасет не будет пересчитан. Таким образом, ваше имя FacetName не будет обновляться. Работает как задумано. SwitchFacet загружает все имена фасетов, но отображает только выбранный.

Когда вы нажимаете ввод по URL-адресу, вы получаете новый экземпляр этой страницы (с новым viewScope), в то время как кнопка обновляет страницу (тот же viewScope) и, следовательно, не пересчитывает facetName.

SwitchFacet был создан для точного соответствия вашему варианту использования, поскольку существующие функциональные возможности аспекта не могут его покрыть.

person stwissel    schedule 08.01.2014
comment
Я не могу использовать extlib, поэтому хочу реализовать его сам. - person Ermo; 13.01.2014
comment
Extlib является частью обычной установки текущего Domino. Что вас тогда останавливает? - person stwissel; 13.01.2014
comment
Я могу использовать только 8.5.3 - person Ermo; 16.01.2014