JSF 2.0:与CRUD应用程序的List<T>相比,使用DataModel<T>有什么优势吗?

2022-09-04 03:55:34

数据模型的一个优点是可以在表中获取行索引。但是我发现这是不必要的,因为您可以使用h:datatable的属性访问当前的row元素。我经常需要转换为数据模型来列出,因为一些组件库需要一个列表。我正在考虑完全放弃DataModel。你觉得怎么样?DataModel有什么优点吗?var

谢谢,西奥


答案 1

另一个优点是可以通过 DataModel#getRowData() 获取当前处理的行。当您想要在事件(转换/验证、值更改侦听器、操作方法等)期间访问当前行时,这特别有用。

例如:

<h:column>
    <h:commandButton value="edit" action="#{bean.edit}" />
</h:column>

public String edit() {
    Item item = dataModel.getRowData();
    // ...
}

您可以在此博客中找到一个利用此内容的基本CRUD示例。如果你没有使用,你将被迫使用它,这只是笨拙的,不适用于验证器/转换器或值变化侦听器。从EL 2.2开始,您还可以将当前项目作为方法参数传递,如下所示:DataModelf:setPropertyActionListenervar

<h:commandButton value="edit" action="#{bean.edit(item)}" />

public String edit(Item item) {
    // ...
}

虽然很好,但这只会使您的web应用程序与基于Java EE 5的容器不兼容。

至于开销,从到的“转换”特别便宜。没有复制或创建新项,它只是一个包装类,它将方法委托给包装的类并向其添加其他方法(另请参阅适配器模式)。List<T>DataModel<T>


答案 2

推荐