JSF FlowScoped 直接入口点

JSF FlowScoped direct entry point

抱歉,如果有人问过这个问题,但我找不到答案。

我已经将一些 spring beans 转换为 cdi @Named 并将作用域设置为 FlowScoped。我这样做是为了解决一个问题,即会话作用域的 bean 在多个选项卡之间共享并在以前打开的选项卡中破坏应用程序。

我已经部分工作了,但我 运行 遇到了 FlowScoped bean 入口点的问题。

我发现的所有示例都使用带有按钮的页面,此按钮具有导航到流入口点的操作(我创建了一个空白 bean-flow.xml 文件)。有没有办法直接从 link 或面部重定向进入流程范围?我有点需要这个有两个原因。或者也许还有其他解决方法?我使用 spring 安全登录,它设置为 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)

此时如有任何帮助,我们将不胜感激。

您似乎正试图(滥用)使用它不直接用于的范围。使用 Deltaspike @WindowScoped 是你应该使用的。它为每个浏览器 window 或选项卡

创建一个范围