ОБСУЖДЕНИЕ

Кнопка "назад" и динамический контент

15 ответов 5,2 тыс.
AI-выжимка обсуждения скоро
Когда виды организованы через xe:dynamicContent и в виде листаем страницы, то после того, как открыли на какой-то странице документ, по кнопке "Назад" из документа надо вернуться в тот вид из которого открыли документ и на нужную страницу (к состоянию вида перед открытием документа). Такой вот вопрос ...
 
Дополнение: документ открывается не в отдельной странице, а так же в динамическом контенте.
 
Дополнение: документ открывается не в отдельной странице, а так же в динамическом контенте.
не суть важно

Когда виды организованы через xe:dynamicContent и в виде листаем страницы, то после того, как открыли на какой-то странице документ, по кнопке "Назад" из документа надо вернуться в тот вид из которого открыли документ и на нужную страницу (к состоянию вида перед открытием документа). Такой вот вопрос ...
во время клика сохраняй состояние вида в переменную окружения.
А по кнопке "Назад" переключай снова на вид и обновляй его. Должно работать.
Копай в сторону свойства first в секции data у вида
 
в extension library есть контрол pagerSaveState
Пример
XML:
<xe:pagerSaveState id="pagerSaveState1" for="viewPanel1"
 globalRows="true">
 </xe:pagerSaveState>
При возврате с документа в вид перед тем как вернуться нужно вызвать
viewStateBean.restoreState = true;

Попробуйте его.

http://xcellerant.net/2013/08/08/xpages-data-views-6-pager-save-state-control/
 
Последнее редактирование:
в extension library есть контрол pagerSaveState
Пример
XML:
<xe:pagerSaveState id="pagerSaveState1" for="viewPanel1"
globalRows="true">
</xe:pagerSaveState>
При возврате с документа в вид перед тем как вернуться нужно вызвать
viewStateBean.restoreState = true;

Попробуйте его.

http://xcellerant.net/2013/08/08/xpages-data-views-6-pager-save-state-control/
Может быть есть пример. У меня что то не выходит.

Есть страница. На страницу добавил динамик контент в котором 2 custom control. Первый контрол содержит вид с документами, 2 содержит форму документа.
Открытие с вида документа делаю так:

Код:
<xp:viewColumn columnName="Claim_Num_Disp" id="viewColumn6" displayAs="link" openDocAsReadonly="true">
<xp:viewColumnHeader value="№ заявки"
id="viewColumnHeader6">
</xp:viewColumnHeader>
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp_1:changeDynamicContentAction for="dynamicContent1"
facetName="document">
<xp_1:this.parameters>
<xp:parameter name="action"
value="openDocument">
</xp:parameter>
<xp:parameter name="documentId"
value="#{javascript:rowData.getDocument().getNoteID()}">
</xp:parameter>
</xp_1:this.parameters>
</xp_1:changeDynamicContentAction>
</xp:this.action></xp:eventHandler></xp:viewColumn>
Возврат с документа в вид
Код:
<xp:button value="Label" id="button1">
 
 
 
 
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
 
<xp:this.action>
 
 
 
 
<xp:actionGroup>
 
<xp:executeScript script="#{javascript:viewStateBean.restoreState = true;}">
 
</xp:executeScript><xp_1:changeDynamicContentAction for="dynamicContent1"
 
facetName="view">
 
</xp_1:changeDynamicContentAction>
 
 
 
 
</xp:actionGroup>
 
</xp:this.action></xp:eventHandler></xp:button>

В результате перехода состояние вида сбрасывается.
 
Если у вас и вид и документ на одной странице то куда вы хотите возвратиться? Если у вас цели по клику по виду показывать соответствующий документ, то pagersavestate тут не при чем и я вас не правильно понял. Еще вопрос зачем вам refreshMode="complete"? Если вам нужно менять только часть страницы. Вы мне опишите цель а я вам помогу, а так я ничего не понял извините
 
Если у вас и вид и документ на одной странице то куда вы хотите возвратиться? Если у вас цели по клику по виду показывать соответствующий документ, то pagersavestate тут не при чем и я вас не правильно понял. Еще вопрос зачем вам refreshMode="complete"? Если вам нужно менять только часть страницы. Вы мне опишите цель а я вам помогу, а так я ничего не понял извините
В документе надо реализовать кнопку назад. И по этой кнопке надо вернуться в последний вид в том состоянии в котором он был перед открытием документа.

Для примера
Есть 2 вида клиенты по дате регистрации и по городу.
Оба эти вида как и форма документа клиент находятся в dynamic content.
Если пользователь открывает документ с 5 страницы view, надо что б при возврате он попал на туже страницу вида ну и что б если категории были свернуты оставались также.
 
Там где вид кидаете
<xe:pagerSaveState id="pagerSaveState1" for="viewPanel1"
globalRows="true">
</xe:pagerSaveState>
for="viewPanel1" это id вида

в документе перед тем как вернуться viewStateBean.restoreState = true;

Но у меня еще вопрос Если у вас вид на одной странице а форма на другой, то для чего это??

<xp_1:changeDynamicContentAction for="dynamicContent1"
facetName="document">
<xp_1:this.parameters>
<xp:parameter name="action"
value="openDocument">
</xp:parameter>
<xp:parameter name="documentId"
value="#{javascript:rowData.getDocument().getNoteID()}">
</xp:parameter>
</xp_1:this.parameters>
</xp_1:changeDynamicContentAction>

почему вы используете changeDynamicContentAction если вы просто открываете документ по клику по линку и почему это так реализовано? И при возврате на вид почему вы опять используете
changeDynamicContentAction for="dynamicContent1" facetName="view">
 
Там где вид кидаете
<xe:pagerSaveState id="pagerSaveState1" for="viewPanel1"
globalRows="true">
</xe:pagerSaveState>
for="viewPanel1" это id вида

в документе перед тем как вернуться viewStateBean.restoreState = true;

Но у меня еще вопрос Если у вас вид на одной странице а форма на другой, то для чего это??

<xp_1:changeDynamicContentAction for="dynamicContent1"
facetName="document">
<xp_1:this.parameters>
<xp:parameter name="action"
value="openDocument">
</xp:parameter>
<xp:parameter name="documentId"
value="#{javascript:rowData.getDocument().getNoteID()}">
</xp:parameter>
</xp_1:this.parameters>
</xp_1:changeDynamicContentAction>

почему вы используете changeDynamicContentAction если вы просто открываете документ по клику по линку и почему это так реализовано? И при возврате на вид почему вы опять используете
changeDynamicContentAction for="dynamicContent1" facetName="view">
Нет и вид и форма на одной страницы. Да если на разных все работает. И надо как то вернуться с формы в вид на тоже место где было открытие формы
 
Так если вид и форма на одной странице то куда вы хотите вернуться если вы уже на странице где вид? Если вам нужно чтобы просто поменялся dynamicContent1 а не вид то просто уберите refreshMode="complete" а сделайте partial refresh dynamicContent1 и тогда вид останется такие каким был, но если вы в форме жмете кнопку с refreshMode="complete" и хотите чтобы вид остался прежним извините в такой конструкции pagersavestate не работает и вашей проблемы не решит конечно.
 
Что вид при переходе с формы на вид (замена контента) скидывает пейджер на 1 страницу. Возврат сделал так
Код:
<xp:button value="Label" id="button1">
 
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="dynamicContent1">
<xp:this.action>
<xp_1:changeDynamicContentAction for="dynamicContent1"
facetName="view">
</xp_1:changeDynamicContentAction>
</xp:this.action></xp:eventHandler></xp:button>

Переход с вида на форму
Код:
<xp:viewColumn columnName="Claim_Num_Disp" id="viewColumn6" displayAs="link" openDocAsReadonly="true">
<xp:viewColumnHeader value="№ заявки"
id="viewColumnHeader6">
</xp:viewColumnHeader>
 
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="dynamicContent1">
<xp:this.action>
<xp_1:changeDynamicContentAction facetName="document"
for="dynamicContent1">
</xp_1:changeDynamicContentAction>
</xp:this.action></xp:eventHandler></xp:viewColumn>

На странице динамик контент выглядит так
Код:
<xe:dynamicContent id="dynamicContent1" defaultFacet="view" useHash="true"><xp:this.facets>
<xc:testDocumentDC xp:key="document"></xc:testDocumentDC>
<xc:testViewDC xp:key="view"></xc:testViewDC>
</xp:this.facets></xe:dynamicContent>
 
а вот теперь мне все ясно :) Мое мнение подход этот накладывает некоторые ограничения. А чего вам мешает уйти от него и сделать 2 разных страницы одна с видом а одна с формой и тогда у вас все будет ок. Зачем так усложнять? Какие преимущества дает этот подход кроме явных недостатков. Ладно если по существу

то как открыть ту страницу что была можно тут
http://www.mydominolab.com/2010/10/repeat-control-better-pagination.html

открыть категорию что была можно увидеть как это делается тут

http://planetlotus.org/profiles/kazunoritatsuki_131142
 
А разные страницы если сделать то возникает другая проблема. С навигатор контрол в левой колонке в applicationLayout. У меня в нем содержаться пункты с подпунктами. Первоначально все пункты свернуты и при открытии формы на новой странице они также будут все свернуты. Может есть возможность передавать состояние navigator при переходе на новую страницую
 
у навигатора есть свойство keepState
 
Извини не работает оказывается только если history.back то срабатывает а так нет.
Тогда добавь скринт на форму
JavaScript:
XSP.addOnLoad(function(){
var li = $('header.lotusMenuHeader').find('li.lotusSelected'); //ищем выбранный li в навигаторе 
var p = $(li).parents('li'); //берем его родителя 
$(p).css({'display':''}); // показываем submenu
})
 

Статистика тем

Создано
xbeetle,
Последний ответ от
Hogmuzzle,
Ответы
15
Просмотры
5 194