3

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

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

4

1 回答 1

6

2种方式:

  1. 而是将它们放在视图范围内。在会话范围内存储特定于视图的数据是一种浪费。如果您有性能问题,您应该专注于在持久层中实现连接池、DB 级分页和/或缓存(例如,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 中的操作方法(如果您的托管 bean 设计与往常有些不同):

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

    这当然只影响当前会话。如果您也想影响其他会话,您应该真正考虑将它们放在视图范围内,如第一种方式所建议的那样。

也可以看看:

于 2011-10-11T20:35:36.977 回答