我的环境: 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 {
}
这个 @Controller
注解也是由我使用的框架提供的,并且声明为。
@InterceptorBinding
@Inherited
@Target({ TYPE, METHOD })
@Retention(RUNTIME)
public @interface Controller {
}
有什么问题吗?
TIA。
在互联网上搜索了一下,我发现了Apache DeltaSpike,它提供了一种新的托管Bean范围。WindowScoped
.
用@WindowScoped`注解的托管Bean就像我想要的那样操作,为我提供了我所需要的确切行为,而且它与我必须使用的框架绝对兼容。