如何在每个浏览器标签页上设置一个Backing Bean实例?

问题描述 投票:0回答:1

我的环境: Java 7JSF 2.1PrimeFaces 6.1。

我的目标我的问题:我的应用程序的某个页面被多次实例化,每个浏览器标签页都有一个,每个标签页都有不同的上下文。

我的问题是: 每当我打开第二个浏览器标签页,用不同的对象id请求相同的url时,前一个标签页就会被销毁,所以只有一个backing bean实例被保留下来。

我怎么知道: 在我的backing bean中,我有一个方法被注解为 @PosConstruct 等与 @PreDestroy所以我可以跟踪实例的生命周期。

我的backing bean注释如下。

@ViewController
public class MyBackingBeanMB extends AbstractBackingBeanMB {
    private static final long serialVersionUID = 1L;

    // many fields and methods
}

这个... @ViewController 注解是由我要使用的应用程序框架提供的。这样的注解被声明为

@Named
@Controller
@Stereotype
@ViewScoped // For me, this should do the trick, but...
@Target(value={TYPE})
@Retention(value=RUNTIME)
@Inherited
public @interface ViewController {
}

Update 1:

这个 @Controller 注解也是由我使用的框架提供的,并且声明为。

@InterceptorBinding
@Inherited
@Target({ TYPE, METHOD })
@Retention(RUNTIME)
public @interface Controller {
}

有什么问题吗?

TIA。

jsf jsf-2
1个回答
1
投票

在互联网上搜索了一下,我发现了Apache DeltaSpike,它提供了一种新的托管Bean范围。WindowScoped.

用@WindowScoped`注解的托管Bean就像我想要的那样操作,为我提供了我所需要的确切行为,而且它与我必须使用的框架绝对兼容。

© www.soinside.com 2019 - 2024. All rights reserved.