• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы xbeetle
  • Дата начала
X

xbeetle

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

xbeetle

Дополнение: документ открывается не в отдельной странице, а так же в динамическом контенте.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Дополнение: документ открывается не в отдельной странице, а так же в динамическом контенте.
не суть важно

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

Hogmuzzle

в extension library есть контрол pagerSaveState
Пример
XML:
<xe:pagerSaveState id="pagerSaveState1" for="viewPanel1"
 globalRows="true">
 </xe:pagerSaveState>
При возврате с документа в вид перед тем как вернуться нужно вызвать
viewStateBean.restoreState = true;

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

 
Последнее редактирование:

Amfion

Green Team
26.05.2010
145
2
BIT
0
в extension library есть контрол pagerSaveState
Пример
XML:
<xe:pagerSaveState id="pagerSaveState1" for="viewPanel1"
globalRows="true">
</xe:pagerSaveState>
При возврате с документа в вид перед тем как вернуться нужно вызвать
viewStateBean.restoreState = true;

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

Может быть есть пример. У меня что то не выходит.

Есть страница. На страницу добавил динамик контент в котором 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>

В результате перехода состояние вида сбрасывается.
 
H

Hogmuzzle

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

Amfion

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

Для примера
Есть 2 вида клиенты по дате регистрации и по городу.
Оба эти вида как и форма документа клиент находятся в dynamic content.
Если пользователь открывает документ с 5 страницы view, надо что б при возврате он попал на туже страницу вида ну и что б если категории были свернуты оставались также.
 
H

Hogmuzzle

Там где вид кидаете
<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">
 

Amfion

Green Team
26.05.2010
145
2
BIT
0
Там где вид кидаете
<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">
Нет и вид и форма на одной страницы. Да если на разных все работает. И надо как то вернуться с формы в вид на тоже место где было открытие формы
 
H

Hogmuzzle

Так если вид и форма на одной странице то куда вы хотите вернуться если вы уже на странице где вид? Если вам нужно чтобы просто поменялся dynamicContent1 а не вид то просто уберите refreshMode="complete" а сделайте partial refresh dynamicContent1 и тогда вид останется такие каким был, но если вы в форме жмете кнопку с refreshMode="complete" и хотите чтобы вид остался прежним извините в такой конструкции pagersavestate не работает и вашей проблемы не решит конечно.
 

Amfion

Green Team
26.05.2010
145
2
BIT
0
Что вид при переходе с формы на вид (замена контента) скидывает пейджер на 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>
 
H

Hogmuzzle

а вот теперь мне все ясно :) Мое мнение подход этот накладывает некоторые ограничения. А чего вам мешает уйти от него и сделать 2 разных страницы одна с видом а одна с формой и тогда у вас все будет ок. Зачем так усложнять? Какие преимущества дает этот подход кроме явных недостатков. Ладно если по существу

то как открыть ту страницу что была можно тут


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

 

Amfion

Green Team
26.05.2010
145
2
BIT
0
А разные страницы если сделать то возникает другая проблема. С навигатор контрол в левой колонке в applicationLayout. У меня в нем содержаться пункты с подпунктами. Первоначально все пункты свернуты и при открытии формы на новой странице они также будут все свернуты. Может есть возможность передавать состояние navigator при переходе на новую страницую
 
H

Hogmuzzle

у навигатора есть свойство keepState
 
H

Hogmuzzle

Извини не работает оказывается только если history.back то срабатывает а так нет.
Тогда добавь скринт на форму
JavaScript:
XSP.addOnLoad(function(){
var li = $('header.lotusMenuHeader').find('li.lotusSelected'); //ищем выбранный li в навигаторе 
var p = $(li).parents('li'); //берем его родителя 
$(p).css({'display':''}); // показываем submenu
})
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!