在我将一些数据提交到数据库后,我希望我的 session bean 自动刷新自身以反射(reflect)最近提交的数据。在 JSF 2.0 中使用托管 session bean 时如何实现这一点?
目前我必须重新启动网络服务器才能清除 session 并重新加载。
最佳答案
两种方式:
将它们放在 View 范围内。在整个 session 范围内存储特定于 View 的数据是一种浪费。如果您有性能问题,您应该专注于在持久层中实现连接池、数据库级分页和/或缓存(例如 JPA2 支持二级缓存)。
@ManagedBean @ViewScoped public class FooBean { // ... }
添加一个公共(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/