如何停止从db为每个请求重新加载数据?

时间:2011-02-04 07:53:46

标签: jsf

我从db加载数据并设置为bean。它在屏幕上显示。假设我单击同一屏幕中的任何按钮,数据将再次从db加载。对于每个请求,所有bean都为null。这就是我无法停止加载的原因。你能告诉我如何解决这个问题吗?

我写了这样的代码

public class Bean {

private Service service;

private String email;

private String name;

public void setService(final Service newService) {
if(this.service == null)
{
this.service = newService;
try {       
//load data from db set the values of email and name                          
 this.service.createContact(this);
} catch (SQLException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

facess-config.xml中

<managed-bean>
<description>The bean to manage service.</description>
<managed-bean-name>Bean</managed-bean-name>
<managed-bean-class>com.bean.Bean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>Service</property-name>
<value>#{service}</value>
</managed-property>
</managed-bean>

1 个答案:

答案 0 :(得分:2)

您的bean是使用请求范围声明的。这意味着,它会为每个请求创建新的。除此之外:if(this.service == null) 总是是真的,因为在创建bean时,无论在什么范围内,setter只被调用一次。

如果您确定数据在请求之间永远不会更改,只需使用会话范围声明bean,并且每个用户会话或应用程序范围创建一次,以便为整个应用程序创建一次。