刷新JSF 2.0中的托管会话bean

D. *_*dez 2 jsf javabeans session-bean managed-bean

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

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

Bal*_*usC 6

2种方式:

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

    @ManagedBean
    @ViewScoped
    public class FooBean {
        // ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加一个公共load()方法,以便可以从action方法调用它(如果需要,可以从另一个bean调用).

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

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

        public void submit() {
            fooService.save(foos);
            load();
        }
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

也可以看看: