我从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();
}
}
}
<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>
答案 0 :(得分:2)
您的bean是使用请求范围声明的。这意味着,它会为每个请求创建新的。除此之外:if(this.service == null)
总是是真的,因为在创建bean时,无论在什么范围内,setter只被调用一次。
如果您确定数据在请求之间永远不会更改,只需使用会话范围声明bean,并且每个用户会话或应用程序范围创建一次,以便为整个应用程序创建一次。