2011-10-21 87 views
0

我有我的JSF處理程序中請求範圍定義如下JSF會話範圍的受管bean的列表

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(); 

方法2:

managedBeanList = service.getResultList(); 
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("managedBeanList",managedBeanList); 

目前我們使用的方法1.

做法是正確的2?當在Java 2中調用Java Garabage收集器時,在內存使用方面是否有優勢?

回答

1

兩者都不正確。該列表必須是會話作用域託管bean的屬性。您應儘可能避免手動擺弄會話映射。

其中一個比另一個更「GC友好」。在方法1中,您最終會得到一個未引用的實例,並返回service.getResultList()。在方法2中,您最終得到一個以前被managedBeanList引用的未引用的列表實例。在這兩種情況下,GC都必須執行相同的工作:清理未引用的實例。

+0

我有請求範圍中定義的JSF處理程序,managedbeanList是它的一部分,請參閱我編輯的問題。 – Greg

+0

如果您只能選擇這兩種方法,我會選擇第一種方法。 – BalusC

相關問題