Java 在一个浏览器中使用带有多个选项卡的JSF

Java 在一个浏览器中使用带有多个选项卡的JSF,java,jsf,icefaces,jsf-2,Java,Jsf,Icefaces,Jsf 2,默认情况下,JSF看起来非常“有状态”。我需要允许人们通过多个选项卡在应用程序的不同部分执行许多操作来使用我们的应用程序 如果不进行大量的重新设计,我似乎找不到合适的指导来实现这一点 我们目前不使用ICEfaces,但我只是在ICEfaces文档中发现: 6.5.7。ICEfaces portlet和并发DOM视图 ICEfaces提供了一个名为 控制的并发DOM视图 ICEfaces框架是否 支持单个视图的多个视图 来自同一浏览器的应用程序。 在portlet容器中运行时, 冰面需要单独处理

默认情况下,JSF看起来非常“有状态”。我需要允许人们通过多个选项卡在应用程序的不同部分执行许多操作来使用我们的应用程序

如果不进行大量的重新设计,我似乎找不到合适的指导来实现这一点

我们目前不使用ICEfaces,但我只是在ICEfaces文档中发现:

6.5.7。ICEfaces portlet和并发DOM视图

ICEfaces提供了一个名为 控制的并发DOM视图 ICEfaces框架是否 支持单个视图的多个视图 来自同一浏览器的应用程序。 在portlet容器中运行时, 冰面需要单独处理 单个门户页面上的portlet作为 不同的视图,因此几乎总是 必要的(因此也是最安全的) 将此参数设置为true

例6.19。启用冰面 中的并发DOM视图功能 WEB-INF/WEB.xml配置文件so 在同一个服务器上分离Portlet 门户页面被视为不同的页面 观点

com.icesoft.faces.concurrentDOMViews 真的

所以,我想知道这个听起来很棒的功能是否可能适用于我现有的h:forms,或者它是否只适用于ICEface组件

有人能给JSF应用提供一些好的建议,让它在多个选项卡中工作吗?

有一种处理多个选项卡/窗口的方法(使用
conversationContext
get参数)

与您想要的JSF框架一起使用

上下文非常适合使用不同的选项卡。只需在每个选项卡上开始新的对话。:)

看一看


请不要使用Seam,它不受支持。使用JSF2.0,如本回答中所述

在JSF2.0中,您可以使用查看范围进行此操作,可使用注释。你甚至可以定义

另见:

    • 我认为视图范围在这里不起作用。问题是关于多浏览器选项卡场景的,我对视图范围的理解是,每个视图(而不是每个选项卡)仍然有一个单独的状态。换句话说,如果您在多个浏览器选项卡中打开同一页面,则您有共享状态的风险

      这里提到:


      这个问题似乎只有两种解决方案:1。CDI/Seam对话范围(或类似于向请求添加额外id的内容)或2。只需坚持请求范围/无状态应用程序。

      更新:我刚刚尝试在项目中包含icefaces.jar,并按照上面的说明修改web.xml。没有明显的积极影响。虽然这里似乎表明,如果我使用h:head和h:body,它应该可以工作,谢谢BalusC。正如我所担心的那样,这需要进行大量的重新设计,但是现在使用ViewScoped bean而不是session scoped要好得多。但是查看范围在跨视图导航中起作用吗??因为我一直在努力让它工作,它只是在下一个视图中重建bean!!不,没有。只要您与同一视图交互/导航回同一视图,视图作用域就会存在。您需要使用会话范围bean,或者重新设计视图以使用有条件呈现/包含的内容。每个选项卡都有自己的视图范围bean。它总是在GET请求上创建的,选项卡只能由GET请求打开。这意味着在关闭选项卡或通过该选项卡更改视图之前,数据将继续存在,对吗?好的,我使用Mojarra 2.1.3(GlassFish 3.1.1)创建了一个测试应用程序,并发现javax.faces.bean.ViewScoped确实为每个选项卡创建了一个单独的视图。也许在过去或MyFaces等其他实现中不是这样?无论如何,听起来像是对多个选项卡使用ViewScope是很棒的!太糟糕了,CDI不支持开箱即用的可视范围,你必须创建自己的或使用Seam!