jsf - 在 JSF 2.0 中刷新托管 session bean

标签 jsf javabeans managed-bean session-bean

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

目前我必须重新启动网络服务器才能清除 session 并重新加载。

最佳答案

两种方式:

  1. 将它们放在 View 范围内。在整个 session 范围内存储特定于 View 的数据是一种浪费。如果您有性能问题,您应该专注于在持久层中实现连接池、数据库级分页和/或缓存(例如 JPA2 支持二级缓存)。

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

  2. 添加一个公共(public) 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();
        }
    

    这当然只影响当前 session 。如果您还想影响其他 session ,您真的应该考虑将它们放在 View 范围内,如第一种方式中所建议的那样。

另见:

关于jsf - 在 JSF 2.0 中刷新托管 session bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7731784/

相关文章:

ajax - 类路径中的 ICEfaces 库可防止文件下载时弹出“另存为”对话框

java - 通用 JSF 实体转换器

java bean : difference between persistent field and persistent property?

java - 不明确的 setter 方法导致分配属性值出现问题

jsf-2 - 通过 FacesContext 传递请求参数

jsf - 在 super bean 和扩展 bean 上调用 @PostConstruct

jsf - ui :repeat in jsf 中的输入绑定(bind)

java - 无状态bean什么时候实例化?

java - Field.get(obj) 返回注入(inject)的 CDI 托管 bean 上的所有空值,同时手动调用 getter 返回正确的值

primefaces - 如何将 JSF 复合组件属性设置为 ManagedBean 属性?