簡體   English   中英

JSF會話范圍的托管bean列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM