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

new*_*JSF 1 jsf primefaces jsf-2

我是JSF 2.0和Primefaces的新手,但决定使用它们创建我的应用程序,看看primefaces展示.

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

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

public List<Addresses> getAddresses() {
     List<Addresses> addr = systemDao.getAddresses(userBean.userId);
     return addr;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Bal*_*usC 5

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

private List<Addresses> addr;

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

public List<Addresses> getAddresses() {
     return addr;
}
Run Code Online (Sandbox Code Playgroud)

如果你真的需要在getter中做一些奇特的原因,那么你需要引入延迟加载.

也可以看看: