有一个托管bean(DemoManagedBean.java),它保存(sample.xhtml)XHTML页面上的一些数据。
在sample.xhtml中有一个重定向链接,它打开了同一页面(sample.xhtml)的新选项卡,但加载了不同的数据。
问题-由于只有一个DemoManagedBean.java实例,因此无法进一步处理任何事情,即;一个选项卡上的更改会影响所有其他选项卡。
是否有一种方法,使我可以有多个实例的每个选项卡持有特定选项卡的数据?
谢谢,
Dinesh
可以通过设置正确的bean 作用域来控制。在您的特殊情况下,您需要将bean放在请求作用域或视图作用域中,这取决于您是否需要基于每个视图的状态。
使用标准的JSF bean管理API,就是这样(不需要XML !):
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean
@RequestScoped
public class DemoManagedBean {
// ...
}
未指定@XxxScoped
范围注释时,默认为@NoneScope
。但是,您的描述与会话或应用程序范围匹配。也许您已经显式地设置了@SessionScoped
或@ApplicationScoped
注释,但并不真正理解您实际在做什么。或者由于某种原因,您可能正在使用Spring来管理bean,没有任何显式作用域的Spring @Controller
指定了默认应用程序作用域。
参见:
- 如何选择合适的bean scope?