在我将一些数据提交到数据库之后,我希望我的会话bean自动刷新自己以反映最近提交的数据。在JSF 2.0中使用托管会话bean时如何实现这一目标?
目前我必须重新启动Web服务器才能清除会话并重新加载。
答案 0 :(得分:6)
2种方式:
将它们放在视图范围内。会话范围内存储特定于视图的数据是一种浪费。如果您有性能问题,则应该集中精力在持久层中实现连接池,数据库级别的分页和/或缓存(例如,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中的action方法(对于你的托管bean设计与平常有点不同的情况):
@ManagedProperty("#{fooBean}")
private FooBean fooBean;
public void submit() {
fooService.save(foos);
fooBean.load();
}
这当然只影响当前会话。如果你想影响其他会话,你应该考虑将它们放在视图范围内,如第一种方式所示。