2015-07-08 3 views
1

Я начинаю использовать JSF Flows, и после прочтения некоторых примеров и спецификаций я получил его для работы.Выход из потока JSF

Я использую Упаковочные потоки в справочниках, как описано в разделе 11.4.3.3 документа specification. Это кажется более простым и более согласованным с соглашениями об именах, уже принятыми с JSF 2.0.

Bellow - это моя текущая структура каталогов. Идентификатор потока - wizard.

Directory Structure

Я понимаю, что есть понятие выхода из потока путем вызова обратный узел.

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

Проблема в том, что я могу перейти на любую страницу в своем приложении, и JSF все еще сохраняет состояние этого потока. Если я вернусь на любую страницу Wizard, вся информация все еще там, что означает, что JSF никогда не удаляла область потока.

Мои вопросы:

  1. Если у меня есть «закончить» CommandButton, как я могу сказать, что JSF, когда пользователь нажимает на эту кнопку, он должен упасть текущий объем потока?
  2. Что еще более важно, Что делать, если у меня нет возвратного узла? Как сообщить JSF о прекращении состояния потока, если пользователь переходит к любому виду * вне каталога потока? (По концепции «потока», я подумал, что это уже стандартное поведение)

* Просто чтобы быть ясно, я имею в виду другой вид JSF (другую страницу внутри моего приложения). Я знаю, что он ничего не может сделать, если пользователь запускает запрос на страницу вне моего приложения или вне области JSF.

ответ

0

Как сообщить JSF о сбросе состояния потока, если пользователь переходит к любому представлению вне каталога потока?

У JSF нет возможности узнать, что вы просто перенаправлены, чтобы сказать «http://google.de». Боб будет находиться в памяти до тех пор, пока реализация не решит, что он должен быть удален из-за неиспользования. У меня есть аналогичная проблема, и теперь я могу подумать о том, чтобы использовать некоторый JS-Handler, который вызвал бы некоторую логику в back-end для завершения потока. В общем случае, нет способа решить эту проблему, если, скажем, сбой вашего браузера, не имея возможности выполнить этот JS-код.

Если у меня есть «закончить» CommandButton, как я могу сказать, что JSF когда пользователь нажимает на эту кнопку, он должен упасть текущий объем потока?

Необходимо определить так называемый возвратный узел (-s).Я дам вам пример моей конфигурации, который успешно заканчивает поток:

<?xml version="1.0"?> 
<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> 
<application/> 

<flow-definition id="myflow"> 
    <view id="Page1"> 
     <vdl-document>/myflow/Page1.xhtml</vdl-document> 
    </view> 

    <start-node>Page1</start-node> 

    <flow-return id="exit"> 
     <from-outcome>/home.xhtml</from-outcome> 
    </flow-return> 
</flow-definition> 

</faces-config> 

Вы должны убедиться, что ваша кнопка команды возвращает «выход» в атрибуте действия. Например:

<p:commandButton value="Finish Flow" action="exit"/> 

В потоке, когда вы поменяете в некоторых новых страницах с помощью «действий» атрибута, убедитесь, чтобы добавить «лица переадресация = истина» в URL, в противном случае, по крайней мере, в моем случае я получаю Ошибка «нет активного контекста». Например. как это:

<p:commandButton value="Next Page" action="Page2.xhtml?faces-redirect=true"/> 
+0

В первый вопрос вы ответили, я имел в виду, что я хочу JSF уронить состояние потока, когда пользователь переходит к другому _view_, и я имею в виду представление, которое находится в пределах JSF рамки, то есть который будет обслуживаться сервлетом Faces, а не какой-либо URL-адрес вне моего приложения (например, ваш пример). JSF действительно знает, какой взгляд запрашивает пользователь, и откуда он/она приходит, поэтому я думаю, что есть еще способ сделать это (может быть, программно? С помощью Phase Listener? Idk, это мой вопрос). Обновил мой вопрос. – RinaldoPJr

+0

Что касается второго вопроса, на который вы ответили, то это было, спасибо. – RinaldoPJr

Смежные вопросы