JSF 2.0:与CRUD应用程序的List<T>相比,使用DataModel<T>有什么优势吗?
数据模型的一个优点是可以在表中获取行索引。但是我发现这是不必要的,因为您可以使用h:datatable的属性访问当前的row元素。我经常需要转换为数据模型来列出,因为一些组件库需要一个列表。我正在考虑完全放弃DataModel。你觉得怎么样?DataModel有什么优点吗?var
谢谢,西奥
数据模型的一个优点是可以在表中获取行索引。但是我发现这是不必要的,因为您可以使用h:datatable的属性访问当前的row元素。我经常需要转换为数据模型来列出,因为一些组件库需要一个列表。我正在考虑完全放弃DataModel。你觉得怎么样?DataModel有什么优点吗?var
谢谢,西奥
另一个优点是可以通过 DataModel#getRowData()
获取当前处理的行。当您想要在事件(转换/验证、值更改侦听器、操作方法等)期间访问当前行时,这特别有用。
例如:
<h:column>
<h:commandButton value="edit" action="#{bean.edit}" />
</h:column>
跟
public String edit() {
Item item = dataModel.getRowData();
// ...
}
您可以在此博客中找到一个利用此内容的基本CRUD示例。如果你没有使用,你将被迫使用它,这只是笨拙的,不适用于验证器/转换器或值变化侦听器。从EL 2.2开始,您还可以将当前项目作为方法参数传递,如下所示:DataModel
f:setPropertyActionListener
var
<h:commandButton value="edit" action="#{bean.edit(item)}" />
跟
public String edit(Item item) {
// ...
}
虽然很好,但这只会使您的web应用程序与基于Java EE 5的容器不兼容。
至于开销,从到的“转换”特别便宜。没有复制或创建新项,它只是一个包装类,它将方法委托给包装的类并向其添加其他方法(另请参阅适配器模式)。List<T>
DataModel<T>