JSF是否使用List或Array供内部使用?

时间:2011-11-14 08:33:26

标签: jsf

我正在试图弄清楚我是否应该使用JSF的列表或数组。 我知道它同时接受了,但我也想要有效率。

我指的是列表/数组传递给JSF的实例,例如:

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

谢谢!

1 个答案:

答案 0 :(得分:3)

JSF不会转换任何内容。两者都得到同样好的支持。 JSF将把值包装在合适的DataModel实现中,以跟踪迭代行。另请参阅UIRepeat的源代码(以下内容来自Mojarra):

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并且只使用原语和普通数组:)

现在记忆力很便宜。