我正在试图弄清楚我是否应该使用JSF的列表或数组。 我知道它同时接受了,但我也想要有效率。
我指的是列表/数组传递给JSF的实例,例如:
<ui:repeat value="#{bean.array}" />
谢谢!
答案 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并且只使用原语和普通数组:)
现在记忆力很便宜。