2011-11-14 42 views
1

我想弄清楚是否應該使用列表或數組與JSF。 我知道它同時接受,但我也想效率。JSF是否將List或Array用於內部使用?

我指的是哪裏列表/陣列傳遞給JSF,例如實例:

<ui:repeat value="#{bean.array}" /> 

謝謝!

+0

我不會擔心它。如果存在性能差異,則可以忽略不計。使用最適合您需求的數據結構。 –

+0

@GaryBuyn是的......但是如果JSF實際上從一種類型的容器轉換爲另一種,並且尺寸很大,那麼可能會花費一大堆錢來轉換它。 – Ben

+0

它可能會使用[model]來調整值(http://download.oracle.com/docs/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/api/javax/faces/model/package-summary .html)類型。 – McDowell

回答

3

JSF不會轉換任何東西。兩者同樣得到很好的支持。 JSF會將這個值包裝在合適的DataModel實現中,以跟蹤迭代的行。另見的UIRepeat的源代碼(下面是鑽嘴魚科):

private DataModel getDataModel() { 
    if (this.model == null) { 
     Object val = this.getValue(); 
     if (val == null) { 
      this.model = EMPTY_MODEL; 
     } else if (val instanceof DataModel) { 
      this.model = (DataModel<Object>) val; 
     } else if (val instanceof List) { 
      this.model = new ListDataModel<Object>((List<Object>) val); 
     } else if (Object[].class.isAssignableFrom(val.getClass())) { 
      this.model = new ArrayDataModel<Object>((Object[]) val); 
     } else if (val instanceof ResultSet) { 
      this.model = new ResultSetDataModel((ResultSet) val); 
     } else { 
      this.model = new ScalarDataModel<Object>(val); 
     } 
    } 
    return this.model; 
} 

只要選擇任何值類型是最好的和最簡單的維護。配置文件,如果需要普通數組的內存佔用量較小,但它們也很難維護(例如,添加/刪除項目應該發生在System#arrayCopy()之間)。這可能只對靜態集合有意義,但對於動態集合不是。

如果你想要去的過早的優化,那麼你可能不應該是使用JSF所有,但只是普通的香草JSP/Servlet和與原語和普通陣列只工作:)

內存目前很便宜,雖然。

相關問題