Как мне справиться с потоками лиц
Итак, я прочитал
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.