[英]JSF session scoped managed bean list
我在請求范圍中定義了我的JSF處理程序,如下所示
public class JsfHandler {
private List<ManagedBean> managedBeanList; // managed bean List in session scope
}
<managed-bean>
<managed-bean-name>jsfHandler</managed-bean-name>
<managed-bean-class>com.test.JsfHandler</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>managedBeanList</property-name>
<value>#{managedBeanList}</value>
</managed-property>
</managed-bean>
我在JSF中有一個會話范圍內的JSF托管bean列表,定義如下。
<managed-bean>
<managed-bean-name>managedBeanList</managed-bean-name>
<managed-bean-class>java.util.ArrayList</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
方法1:
managedBeanList.clear();
managedBeanList.addAll(service.getResultList());
// assuming service.getResultList() would return a new ArrayList();
方法二:
managedBeanList = service.getResultList();
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("managedBeanList",managedBeanList);
我們目前正在使用方法1。
方法2正確嗎? 在方法2中調用Java Garabage收集器時,在內存使用方面是否有任何優勢。
都不正確。 該列表必須是會話作用域受管bean 的屬性 。 您應該避免手動擺弄會話映射。
一個都不比另一個更“ GC-友好”。 在方法1中,您最終得到一個未引用的實例,該實例是service.getResultList()
返回的。 在方法2中,您得到的是列表的未引用實例,該實例先前已由managedBeanList
引用。 在這兩種情況下,GC都必須執行相同的工作:清理未引用的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.