在datater的getter方法中调用数据库时的性能问题,多次调用getter

时间:2011-01-12 14:04:41

标签: jsf jsf-2 primefaces

我是JSF 2.0和Primefaces的新手,但已经决定使用它们创建我的应用程序,看看主要的展示。

我已经完成了我的申请,但发现它非常慢。我已经在各个地方放置了一些system.out.println以查看正在调用的内容。我注意到有时我的控制器中的方法(例如调用我的DAO从数据库中检索值的方法)在一个事件中被调用了6次!我的页面中有很多数据表,所以有时候每个表中填充的每个列表有多个数据表* 6调用,这似乎是导致速度变慢的原因。

我不确定我做错了什么或者我做错了什么但是在我的控制器中我的方法可能看起来像这样,

public List<Addresses> getAddresses() {
     List<Addresses> addr = systemDao.getAddresses(userBean.userId);
     return addr;
}

在视图中,我将在数据表元素上调用此方法以显示结果。

当我第一次加载它时,它只会调用一次,但是当我点击某个按钮打开一个包含完全不相关数据的对话框时,这个getAddresses()可能被调用3-6次而且它与数据无关我在当前的行动中提出要求。是否有人熟悉这个以及如何加快我的应用程序?

1 个答案:

答案 0 :(得分:5)

您应将业务/数据库逻辑放入 getters 。他们只想返回数据,而不是初始化/加载/填充bean的数据。您应该在bean的@PostConstruct,操作方法或任何事件方法中执行业务/数据库逻辑,这些方法都只调用一次,而不是在getter中调用。

private List<Addresses> addr;

@PostConstruct
public void init() {
     addr = systemDao.getAddresses(userBean.userId);
}

public List<Addresses> getAddresses() {
     return addr;
}

如果真的需要在getter中出于某种奇特的原因,那么你需要引入延迟加载。

另见: