刷新JSF 2.0中的托管会话bean

时间:2011-10-11 20:01:05

标签: jsf javabeans managed-bean session-bean

在我将一些数据提交到数据库之后,我希望我的会话bean自动刷新自己以反映最近提交的数据。在JSF 2.0中使用托管会话bean时如何实现这一目标?

目前我必须重新启动Web服务器才能清除会话并重新加载。

1 个答案:

答案 0 :(得分:6)

2种方式:

  1. 将它们放在视图范围内。会话范围内存储特定于视图的数据是一种浪费。如果您有性能问题,则应该集中精力在持久层中实现连接池,数据库级别的分页和/或缓存(例如,JPA2支持二级缓存)。

    @ManagedBean
    @ViewScoped
    public class FooBean {
        // ...
    }
    

  2. 添加一个公共load()方法,以便可以从操作方法调用它(如果需要,可以从另一个bean调用)。

    @ManagedBean
    @SessionScoped
    public class FooBean {
    
        private List<Foo> foos;
    
        @EJB
        private FooService fooService;
    
        @PostConstruct
        public void load() {
            foos = fooService.list();
        }
    
        // ...
    }
    

    可以在同一个bean内的action方法中调用(如果你将表单提交到同一个托管bean当然):

        public void submit() {
            fooService.save(foos);
            load();
        }
    

    或来自另一个bean中的action方法(对于你的托管bean设计与平常有点不同的情况):

        @ManagedProperty("#{fooBean}")
        private FooBean fooBean;
    
        public void submit() {
            fooService.save(foos);
            fooBean.load();
        }
    

    这当然只影响当前会话。如果你想影响其他会话,你应该考虑将它们放在视图范围内,如第一种方式所示。

  3. 另见: