在我将一些数据提交到数据库后,我希望我的会话 bean 自动刷新以反映最近提交的数据。在 JSF 2.0 中使用托管会话 bean 时如何实现这一点?
目前,我必须重新启动 Web 服务器才能清除会话并重新加载。
在我将一些数据提交到数据库后,我希望我的会话 bean 自动刷新以反映最近提交的数据。在 JSF 2.0 中使用托管会话 bean 时如何实现这一点?
目前,我必须重新启动 Web 服务器才能清除会话并重新加载。
2种方式:
而是将它们放在视图范围内。在会话范围内存储特定于视图的数据是一种浪费。如果您有性能问题,您应该专注于在持久层中实现连接池、DB 级分页和/或缓存(例如,JPA2 支持二级缓存)。
@ManagedBean
@ViewScoped
public class FooBean {
// ...
}
添加一个公共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();
}
这当然只影响当前会话。如果您也想影响其他会话,您应该真正考虑将它们放在视图范围内,如第一种方式所建议的那样。