Как мне справиться с потоками лиц

Итак, я прочитал

http://docs.oracle.com/javaee/7/tutorial/doc/jsf-configure003.htm

https://blogs.oracle.com/arungupta/entry/jsf_2_2_faces_flow

И еще несколько постов. Вопрос, на который я не смог получить ответ, прочитав эти ресурсы:

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

Допустим, я создаю веб-приложение, которое имеет боковую панель с меню для всех видов вещей (Crud для сотрудников, Crud для клиентов и другие предложения и отчеты).

Затем я хочу запустить поток лиц для правильной обработки создания сложного объекта, поскольку это создание разделено на несколько видов (кстати, я знаю, как его запустить). Но как мне завершить поток, если пользователь нажимает, например, на ссылку, которая генерирует отчет, который не имеет никакого отношения к потоку.

Будет ли поток храниться в памяти? Будет ли он завершен автоматически, оставив представление, связанное с потоком?

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

2 ответа

Вы правы, для навигации внутри потока или для представления вне потока требуется либо использование h:commandButton / h:commandLink, либо программная обработка навигации. Смотрите этот ответ для примера.

Это, безусловно, является обратной стороной Faces Flow, так как навигация с использованием GET должна быть стандартным случаем.

Хорошо, с помощью коллеги, я (эмпирически) нашел ответ на этот вопрос.

Краткий ответ:

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

НО, если вы оставите его с помощью запроса get для любого представления, которое не находится в потоке, то поток не будет закрыт, он будет находиться в памяти.

Я постараюсь уточнить как можно скорее.

ОБНОВИТЬ

Просто чтобы прояснить, мы нашли это с помощью Java VisualVM и проверки того, будут ли экземпляры потока сохраняться или будут собираться GC.

Другие вопросы по тегам