JSF FlowScoped прямая точка входа - PullRequest
0 голосов
/ 08 ноября 2018

извините, если этот вопрос был задан, но я не смог найти ответ.

Я преобразовал некоторые пружинные бины в cdi @Named и установил область видимости на FlowScoped. Я сделал это, чтобы исправить проблему, когда бины сессионной области были разделены между несколькими вкладками и разбили приложение на ранее открытых вкладках.

У меня это частично работает, но я столкнулся с проблемой с точкой входа для bean-компонентов FlowScoped.

Все примеры, которые я нашел, используют страницу с кнопкой, у этой кнопки есть действие, которое перемещается к точке входа потока (я создал пустой файл bean-flow.xml). Есть ли способ ввести область потока непосредственно из ссылки или перенаправления лица? Мне это нужно по двум причинам. Или, может быть, есть другая работа вокруг? Я использую Spring Security для входа в систему, и он установлен с default-target-url="/search/search.xhtml". Я справился с этим, создав другую страницу и просто воспользовавшись приведенным ниже описанием, чтобы выполнить перенаправление при загрузке

        ConfigurableNavigationHandler configurableNavigationHandler =
            (ConfigurableNavigationHandler) FacesContext.getCurrentInstance()
                .getApplication().getNavigationHandler();

    configurableNavigationHandler.performNavigation("search");

выше работает, но ниже не

FacesContext.getCurrentInstance().getExternalContext().redirect("/search/search.xhtml");

В идеале я бы тоже хотел, чтобы можно было набирать текст прямо в адресной строке

http://localhost:8080/searchApp/search/search.xhtml?searchcriteria=somecriteria

В тот момент, когда я делаю это или перенаправляю лица, я получаю сообщение об ошибке

javax.servlet.ServletException: WebBeans context with scope type annotation @FlowScoped does not exist within current thread
javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:65)

Любая помощь на этом этапе будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 ноября 2018

Похоже, вы пытаетесь (ab) использовать область, для которой она не предназначена для непосредственного использования. Использование Deltaspike @WindowScoped - это то, что вы должны использовать. Создает область для окна браузера или вкладку

...