在一个浏览器中使用带有多个选项卡的 JSF [重复]
Posted
技术标签:
【中文标题】在一个浏览器中使用带有多个选项卡的 JSF [重复]【英文标题】:Using JSF with multiple tabs in one browser [duplicate] 【发布时间】:2011-03-13 06:28:08 【问题描述】:默认情况下,JSF 看起来非常“有状态”。我需要允许人们使用我们的应用程序和多个选项卡在应用程序的不同部分做很多事情。
如果不进行大量的重新设计,我似乎找不到合适的指导。
我们目前不使用 ICEfaces,但我刚刚在 ICEfaces 文档中找到了这个:
6.5.7。 ICEfaces Portlet 和并发 DOM 视图
ICEfaces 提供了一个名为 控制的并发 DOM 视图 ICEfaces 框架是否 支持单个视图的多个视图 来自同一浏览器的应用程序。 在 portlet 容器中运行时, ICEfaces 需要单独处理 单个门户页面上的 portlet 作为 不同的观点,所以它几乎总是 必要(因此也是最安全的) 将此参数设置为 true。
示例 6.19。启用 ICEfaces 中的并发 DOM 视图功能 WEB-INF/web.xml 配置文件所以 将相同的 portlet 分开 门户页面被视为不同的 意见
com.icesoft.faces.concurrentDOMViews 真的
所以,我想知道这个听起来很棒的功能是否可能适用于我现有的 h:forms 或者它是否只适用于 ICEface 组件?
任何人都可以提供任何好的建议来让 JSF 应用程序在多个选项卡中工作吗?
【问题讨论】:
更新:我刚刚尝试在我的项目中包含 icefaces.jar 并按照上面的说明修改 web.xml。没有明显的积极影响。虽然这里似乎表明它应该在我使用 h:head 和 h:body 时才有效:wiki.icefaces.org/display/ICE/Getting+Started 和 icefaces.org/docs/v1_8_2/htmlguide/devguide/… 【参考方案1】:在 JSF 2.0 中,您可以为此使用 视图范围,使用 @ViewScoped
进行注释。你甚至可以定义custom scopes。
另见:
The benefits and pitfalls of@ViewScoped
【讨论】:
感谢 BalusC。正如我所担心的那样,进行了大量的重新设计,但是现在使用 ViewScoped beans 而不是 session scoped 会好很多。 但是视图范围是否可以跨视图导航工作?因为我一直在努力让它工作,它只是在下一个视图中重建 bean! 不,它没有。只要您与 same 视图交互/导航回该视图,视图范围就会一直存在。您需要使用会话范围的 bean 或重新设计视图以使用有条件呈现/包含的内容。 每个选项卡都有自己的视图范围 bean。它总是在 GET 请求上创建,并且标签只能由 GET 请求打开。 意味着数据将一直存在,直到关闭选项卡或通过该选项卡更改视图,对吧?【参考方案2】:我认为 View Scope 不会在这里工作。这个问题专门关于多浏览器选项卡场景,我对 View Scope 的理解是每个视图(而不是每个选项卡)仍然有一个单独的状态。换句话说,如果您在多个浏览器选项卡中打开同一个页面,那么您就有共享状态的风险。
这里提到:http://www.java.net/node/692109
似乎只有两种解决方案可以解决这个问题:1. CDI/Seam 对话范围(或类似在请求中添加额外 id 的东西)或 2. 坚持使用请求范围/无状态应用。
【讨论】:
好的,我用 Mojarra 2.1.3 (GlassFish 3.1.1) 创建了一个测试应用程序,发现 javax.faces.bean.ViewScoped 实际上确实为每个选项卡创建了一个单独的视图。也许过去或 MyFaces 等其他实现并非如此?无论如何,听起来对多个选项卡使用 ViewScoped 很棒!太糟糕了 CDI 不支持开箱即用的 ViewScoped,您必须创建自己的或使用 Seam!【参考方案3】:MyFaces orchestra 有一种处理多个选项卡/窗口的方法(使用conversationContext
get 参数)。
【讨论】:
【参考方案4】:将Seam 与您想要的 JSF 框架一起使用。
conversation 上下文非常适合使用不同的选项卡。只需在每个选项卡上开始新对话。 :)
看看Booking demo
请不要使用 Seam,它不受支持。按照此答案https://***.com/a/3203670/4206
中的说明使用 JSF 2.0【讨论】:
以上是关于在一个浏览器中使用带有多个选项卡的 JSF [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 vue.js 小部件中打开多个选项卡时找出活动选项卡的方法
如何使用底部导航菜单处理屏幕旋转,其中每个菜单都引用一个带有有限选项卡的新查看器(3-4)?我正在使用 ViewModel