Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 性能问题在dataTable的getter方法中调用数据库时,会多次调用getter_Jsf_Jsf 2_Primefaces - Fatal编程技术网

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

Jsf 性能问题在dataTable的getter方法中调用数据库时,会多次调用getter,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我不熟悉JSF2.0和Primefaces,但我决定使用它们创建我的应用程序,看看Primefaces showcase 我已经完成了我的申请,但注意到它非常慢。我在不同的地方放置了一些system.out.println来查看调用了什么,我注意到有时控制器中的方法,比如调用我的DAO从数据库检索值的方法,在一个事件中被调用多达6次!我的页面中有很多数据表,所以有时会有多个数据表*6次调用,每个表中填充的每个列表似乎就是导致速度缓慢的原因 我不确定我做错了什么,或者我是否做错了什么,但在我的控制

我不熟悉JSF2.0和Primefaces,但我决定使用它们创建我的应用程序,看看Primefaces showcase

我已经完成了我的申请,但注意到它非常慢。我在不同的地方放置了一些system.out.println来查看调用了什么,我注意到有时控制器中的方法,比如调用我的DAO从数据库检索值的方法,在一个事件中被调用多达6次!我的页面中有很多数据表,所以有时会有多个数据表*6次调用,每个表中填充的每个列表似乎就是导致速度缓慢的原因

我不确定我做错了什么,或者我是否做错了什么,但在我的控制器中,例如,我有一个类似这样的方法

public List<Addresses> getAddresses() {
     List<Addresses> addr = systemDao.getAddresses(userBean.userId);
     return addr;
}
公共列表getAddresses(){ List addr=systemDao.getAddresses(userBean.userId); 返回地址; } 在视图中,我将像在datatable元素上一样调用此方法以显示结果


当我第一次加载它时,它只会调用一次,但是当我单击一个按钮打开一个包含完全不相关数据的对话框时,这个getAddresses()可能会被调用3-6次,它与我在当前操作期间请求的数据无关。有人熟悉这一点吗?我可以如何加速我的应用程序?

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

private List<Addresses> addr;

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

public List<Addresses> getAddresses() {
     return addr;
}
私有列表

我曾尝试过这种方法,但每次尝试都会出现“构造函数抛出异常”的异常,因此我认为这是一种错误的方法。我再次调用我的DAO,所以我不确定在我的托管bean构造函数中调用它时,问题是否发生在DAO上,只需处理异常即可。使用
try catch
或添加
throws
子句。这与JSF无关,它只是基本的Java.hrmm,我想在我的构造函数中抛出这样的异常对我来说似乎很奇怪,不过,谢谢,我会试一试。为什么会奇怪呢?当数据库关闭或查询完全是假的时,您希望应用程序做什么?显示错误页面,对吗?抛出异常是一种方法。不,我理解,但问题是我的数据库没有关闭,查询不是伪造的,每次都会抛出异常。我对Java不是很在行,但对我来说,得到这个异常似乎是说在构造函数中调用DAO有问题。现在我确信您是正确的,我的应用程序肯定还有其他问题,因为当我从构造函数中调用dao时,它不喜欢它。它只有在我在getter之类的方法中调用DAO时才会编译和运行。