30.18. <w:editDataGrid>

EditDataGrid与DataGrid相似,也是一个强大的以表格展现数据的构件。与DataGrid不同之处在于EditDataGrid可以在线编辑数据。

30.18.1. 构件信息

表 30.49. 构件信息

Component Typeorg.operamasks.faces.component.grid.impl.UIEditDataGrid
Component Familyorg.operamasks.faces.component.layout.impl.UIPanel
Component Classorg.operamasks.faces.component.grid.impl.UIEditDataGrid
Tag Classorg.operamasks.faces.webapp.grid.UIEditDataGridTag
Renderer Typeorg.operamasks.faces.component.grid.impl.UIEditDataGrid
Renderer Classorg.operamasks.faces.render.widget.ajax.AjaxEditDataGridRenderer

继承体系

+java.lang.Object

++javax.faces.component.UIComponent

+++javax.faces.component.UIComponentBase

++++org.operamasks.faces.component.layout.base.UIPanelBase

+++++org.operamasks.faces.component.layout.impl.UIPanel

++++++org.operamasks.faces.component.grid.UIDataGridBase

+++++++org.operamasks.faces.component.grid.impl.UIDataGrid

++++++++org.operamasks.faces.component.grid.UIEditDataGridBase

+++++++++org.operamasks.faces.component.grid.impl.UIEditDataGrid

30.18.2. 属性

表 30.50. 属性

addedData 定义类 org.operamasks.faces.component.grid.UIEditDataGridBase
类型 javax.el.ValueExpression(java.lang.Object)
是否必须 延时求值
绑定的用来接收在客户端新增的数据的对象
autoExpandColumn 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
允许扩展宽度以填充空余空间的列的序号(序号从1开始,隐藏列也要占用序号)。比如一个dataGrid有两列,且autoExpandColumn="2",且第一列宽度为100px,当dataGrid宽度是200px时第二列宽度会自动变成200-25-100=75px,当dataGrid宽度是250px时第二列宽度会自动变成250-25-100=125px
autoExpandMax 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Integer)
是否必须 延时求值
允许扩展宽度以填充空余空间的列的最大扩展宽度
autoExpandMin 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Integer)
是否必须 延时求值
允许扩展宽度以填充空余空间的列的最小扩展宽度
autoHeight 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否允许构件自适应高度(默认值: false).
autoLoad 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(boolean)
是否必须 延时求值
默认grid是否装载数据,默认值为true,若设置为false,需要客户端js调"gridJsvar.store.load({params:{start:%d,limit:%d}});",其中gridJsvar为datagrid的jsvar属性,第一个%d为start参数(第一条数据索引),第二个%d为limit参数(每页显示行数);
bindBean 定义类 org.operamasks.faces.component.grid.UIEditDataGridBase
类型 javax.el.ValueExpression(java.lang.Object)
是否必须 延时求值
指定一个用于创建addedData,modifiedData,removedData中的模型元素的对象。此对象可以是以下类型: 1. java.lang.String:此时取值应该为一个类的全名。OperaMasks将载入这个类并用它创建模型元素。 2. java.lang.Class:OperaMasks将直接使用这个类创建模型元素。 3. 一个包含名为createBean()方法的对象实例:OperaMasks将调用该实例上的createBean()方法,此方法应返回模型元素实例。
binding 定义类 javax.faces.component.UIComponentBase
类型 javax.el.ValueExpression(javax.faces.component.UIComponent)
是否必须 延时求值
一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。
border 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否显示面板body元素的边框(默认值:true)。默认情况下,边框是一个2px宽的内嵌边框,但当bodyBorder属性被设置成false时可以进一步修改
clicksToEdit 定义类 org.operamasks.faces.component.grid.impl.UIEditDataGrid
类型 javax.el.ValueExpression(java.lang.Integer)
是否必须 延时求值
单击激活编辑还是双击激活编辑状态(1 - 单击;2 - 双击)
clientSelectedCells 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(int[][])
是否必须 延时求值
CellSelectionModel时客户端选中的单元格
columnModel 定义类 org.operamasks.faces.component.grid.UIDataGridBase
类型 javax.el.ValueExpression(org.operamasks.faces.component.grid.GridColumnModel)
是否必须 延时求值
dataGrid的GridColumnModel,用于进行列的相关属性的配置
dataProvider 定义类 org.operamasks.faces.component.grid.UIDataGridBase
类型 javax.el.ValueExpression(org.operamasks.faces.component.grid.provider.GridDataProvider)
是否必须 延时求值
dataGrid的GridDataProvider,用于处理取数,服务器端分页等逻辑。若不指定, 将根据value属性的数据类型选用默认实现。
enableColumnHide 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否允许隐藏列
enableColumnMove 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否允许拖动列
enableColumnResize 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否允许表格列改变大小
enableHdMenu 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否具有隐藏某列的菜单,默认值为true
forceFit 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否令column自动扩展或收缩,以适应DataGrid宽度,避免出现横向滚动条
headerModel 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(org.operamasks.faces.component.grid.GridHeaderModel)
是否必须 延时求值
dataGrid的GridHeaderModel,配置表头的相关信息
height 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件高度的像素值 (默认是auto)
hideHeaders 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否隐藏表头
honorViewState 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
ajax交互时是否传递ViewState. 取值为true时(默认为false),dataGrid的ajax交互传递ViewState,为false时不传递(默认不传递)
id 定义类 javax.faces.component.UIComponentBase
类型 java.lang.String
是否必须 延时求值
这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。
idColumn 定义类 org.operamasks.faces.component.grid.UIDataGridBase
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
dataGrid的id列,是所有dataGrid的列中可以作为唯一标示符的一列的id
initConfig 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Object)
是否必须 延时求值
初始化配置对象。取值可以是ExtConfig对象, 或String,表示一个JavaScript对象,比如:{"a": "avalue", "b":true, "c":200, "d":"var::dvalue"} 如果取值是表示一个JavaScript对象的String,则key必须用(双)引号包起来,比如"a"。
invalidTextTemplate 定义类 org.operamasks.faces.component.grid.impl.UIEditDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
若输入项校验不通过时,提交表单时弹出的提示信息,默认值为"{0} [{1}, {2}] has an invalid value", 其中0, 1, 2为当前校验未通过单元格的header,row,col. 如用户需定制提示消息可照此进行设置,如 "表格列'{0}' 第{1}行第{2}列输入的值不合法"
jsvar 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
客户端脚本使用的javascript变量名
keepLastParams 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
构件的取数请求是否保留上次请求参数
loadMask 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否显示加载动画。当数据表格加载数据量过大,或所需时间过长时,可以设置dataGrid构件的loadMask属性为true,以获得更好的用户体验
merged 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
表格是否融合的
mergedColumns 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String[])
是否必须 延时求值
融合的列的Id数组
mergedInfos 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(org.operamasks.faces.component.grid.MergedInfo[])
是否必须 延时求值
自定义融合的区域
modifiedData 定义类 org.operamasks.faces.component.grid.UIEditDataGridBase
类型 javax.el.ValueExpression(java.lang.Object)
是否必须 延时求值
绑定的用来接收在客户端修改的数据的对象
moveEditorOnEnter 定义类 org.operamasks.faces.component.grid.impl.UIEditDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
按下回车键是否跳到下一个cell
multiSelectOnClick 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否允许点击时选中多行或多个单元格
multiSelectOnClickRow 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否允许点击行时选中多行(此属性保留仅为向前兼容,请使用multiSelectOnClick属性)
onafteredit 定义类 org.operamasks.faces.component.grid.impl.UIEditDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
在构件编辑之后执行JavaScript代码
onbeforeedit 定义类 org.operamasks.faces.component.grid.impl.UIEditDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
在构件编辑之前执行的JavaScript代码
onbeforeexpand 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件展开前执行的JavaScript代码
oncelldeselect 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件失去选中一个cell时执行的JavaScript代码
oncellselect 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件选中一个cell时执行的JavaScript代码
ondblclick 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件双击某条记录时执行的JavaScript代码
onrowdeselect 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件反选某条记录时执行的JavaScript代码
onrowselect 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件选择某条记录时执行的JavaScript代码
onselectionchange 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件选择记录改变时执行的JavaScript代码
paged 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否开启分页功能
queueId 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
dataGrid的delegate请求队列的ID。只有web.xml中配置了org.operamasks. faces.CLIENT_DELEGATE_QUEUE=true,该属性才有意义。该属性的默认值为delegate_request_load_queue_id
queueTimeout 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Double)
是否必须 延时求值
form中发起的Ajax请求排队的超时时间(单位:秒),当queueId属性设置时生效.
readOnly 定义类 org.operamasks.faces.component.grid.impl.UIEditDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
构件是否只读
remoteSort 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否进行服务端排序
removedData 定义类 org.operamasks.faces.component.grid.UIEditDataGridBase
类型 javax.el.ValueExpression(java.lang.Object)
是否必须 延时求值
绑定的用来接收在客户端删除的数据的对象
rendered 定义类 javax.faces.component.UIComponentBase
类型 boolean(boolean)
是否必须 延时求值
一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。
rowDataProvider 定义类 org.operamasks.faces.component.grid.UIDataGridBase
类型 javax.el.ValueExpression(org.operamasks.faces.component.grid.provider.GridRowDataProvider)
是否必须 延时求值
dataGrid的RowDataProvider,DataGrid渲染每一行时,会将每一行的数据传递给getLabel方法,由接口实现者决定如何展示数据
rowInitHeight 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Integer)
是否必须 延时求值
行的初始高度
rowResizable 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
行是否可以改变大小.
rows 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(int)
是否必须 延时求值
每页显示的数据条数, 当paged属性为true即开启分页功能的时候才起作用
selectable 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
单元格是否可选择复制(默认值:fasle)
selectedCells 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(int[][])
是否必须 延时求值
CellSelectionModel时选中的单元格
selectionModel 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(org.operamasks.faces.component.grid.GridSelectionModel)
是否必须 延时求值
dataGrid的GridSelectionModel,配置行选择模型
selections 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(int[])
是否必须 延时求值
选中的行的行号的数组
showRowNumber 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否显示行号
showTitleOnCollapse 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
在构件收缩后是否显示标题 (默认值:false). 注意:该属性仅在region="north"或者region="south",属性被设置成true时有效
singleSelect 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否只支持单选
stripeRows 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否使行具有条纹 (默认是true)
style 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件渲染时应用到构件的CSS风格,对应于元素的style属性
styleClass 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
空格分隔的CSS风格类名列表,渲染时作为元素的"class"属性
summaryRowPosition 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
合计行的位置,可以设置为:inner,out. 设置为inner的合计行位置紧跟数据行,随垂直滚动条移动. 设置为out的合行行位置在DataGrid的最下面,不随垂直滚动条移动.
toolBarPosition 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
内置工具栏的位置,可能的取值为"top","bottom",或"both"。
trackMouseOver 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否当鼠标移动到某一行时高亮显示该行
transData 定义类 org.operamasks.faces.component.grid.UIEditDataGridBase
类型 javax.el.ValueExpression(java.lang.Object)
是否必须 延时求值
绑定的用来接收在客户端所有更改操作(包括增加,删除,修改)的JSON数据的对象
value 定义类
类型 javax.el.ValueExpression(java.lang.Object)
是否必须 延时求值
dataGrid的数据。默认支持的类型可以是对象数组,java.util.List,javax.faces.model.DataModel,java.sql.ResultSet,java.util.Collection(用户应自行保证使用有序的Collection实现,否则翻页时可能会出现乱序问题)。但通过指定自定义的dataProvider,可以支持其他类型。
var 定义类 org.operamasks.faces.component.grid.impl.UIDataGrid
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件每一行数据的变量。读取dataGrid的数据时,会去遍历value的集合,遍历的过程会得到每一行的数据,var就是代表每一行数据的变量
viewProvider 定义类 org.operamasks.faces.component.grid.UIDataGridBase
类型 javax.el.ValueExpression(org.operamasks.faces.component.grid.provider.GridViewProvider)
是否必须 延时求值
dataGrid的GridViewProvider,当为DataGrid指定了GridDataProvider之后,DataGrid将会根据自身的value值去获取返回的数据集合
width 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件宽度的像素值 (默认是auto)

30.18.3. 构件API

30.18.3.1. UIEditDataGrid(editGrid的构件类)

表 30.51. 方法

appendRow 方法签名 public void appendRow()
参数说明 无参数
返回值 无返回值
方法描述 在当前grid中追加一行
appendRow 方法签名 public void appendRow(Object rowData)
参数说明 rowData 要插入的行的数据
返回值 无返回值
方法描述 在当前grid中追加一行特定的数据
insertRow 方法签名 public void insertRow(int pos)
参数说明 pos 插入的位置
返回值 无返回值
方法描述 在当前grid的特定位置中插入一行
insertRow 方法签名 public void insertRow(int pos, Object rowData)
参数说明 pos 插入的位置,rowData 要插入的行的数据
返回值 无返回值
方法描述 在当前grid的特定位置中插入一行特定的数据
commit 方法签名 public void commit()
参数说明 无参数
返回值 无返回值
方法描述 提交对当前grid的修改
getAddedData 方法签名 public Object getAddedData()
参数说明 无参数
返回值 返回客户端新增数据的模型对象
方法描述 获取客户端新增数据的模型对象
getModifiedData 方法签名 public Object getModifiedData()
参数说明 无参数
返回值 返回客户端修改数据的模型对象
方法描述 获取客户端修改数据的模型对象
getRemovedData 方法签名 public Object getRemovedData()
参数说明 无参数
返回值 返回客户端删除数据的模型对象
方法描述 获取客户端删除数据的模型对象
getTransData 方法签名 public Object getTransData()
参数说明 无参数
返回值 返回客户端更改(增删改)的JSON数据
方法描述 获取客户端更改(增删改)的JSON数据
rebind 方法签名 public void rebind()
参数说明 无参数
返回值 无返回值
方法描述 重新绑定grid的属性
reload 方法签名 public void reload()
参数说明 无参数
返回值 无返回值
方法描述 重新加载grid的数据
remove 方法签名 public void remove()
参数说明 无参数
返回值 无返回值
方法描述 删除grid中当前选中的行
remove 方法签名 public void remove(int row)
参数说明 要删除的行的行号
返回值 无返回值
方法描述 删除grid中的特定行


30.18.3.2. GridDataProvider(抽象类,Grid的数据提供者)

表 30.52. 方法

getElements 方法签名 public abstract Object[] getElements()
参数说明 无参数
返回值 grid的当前页元素
方法描述 获取元素
getElement 方法签名 public abstract Object getElement(int index)
参数说明 rowIndex
返回值 指定的rowIndex对应的数据
方法描述 根据指定的rowIndex获取数据
getTotalCount 方法签名 public abstract int getTotalCount()
参数说明 无参数
返回值 记录总行数
方法描述 得到记录行数
getStart 方法签名 public int getStart()
参数说明 无参数
返回值 起始行数,默认为0
方法描述 得到起始行数,默认为0
setStart 方法签名 public void setStart(int start)
参数说明 起始行数
返回值 无返回值
方法描述 设置grid数据的起始行数
setLimit 方法签名 public void setLimit(int limit)
参数说明 每次装载的行数,默认为getElements返回值的长度
返回值 无返回值
方法描述 设置每次装载的行数
getLimit 方法签名 public int getLimit()
参数说明 无参数
返回值 每次装载的行数
方法描述 设置每次装载的行数
sort 方法签名 public void sort(GridColumn column, SortDirection direction)
参数说明 column 排序列,direction 排序方向
返回值 无返回值
方法描述 当grid设置了remoteSort=true时,发起排序请求会调用到此方法。


30.18.3.3. GridViewProvider(接口)

DataGrid数据提供者,当为DataGrid指定了GridDataProvider之后,DataGrid将会根据自身的value值去获取返回的数据集合。每个方法传入的input参数,可以是一个list或者数组或者resultset等数据集合方式,此接口的实现者,根据传入的input来提供ColumnModel、HeaderModel以及数据。

表 30.53. 方法

getSelectionModel 方法签名 public GridSelectionModel getSelectionModel(Object input)
参数说明 dataGrid的数据集合
返回值 dataGrid的GridSelectionModel,配置行选择模型
方法描述 获取dataGrid的GridSelectionModel
getColumnModel 方法签名 public GridColumnModel getColumnModel(Object input)
参数说明 dataGrid的数据集合
返回值 dataGrid的GridColumnModel
方法描述 获取dataGrid的GridColumnModel,用于进行列属性配置
getHeaderModel 方法签名 public GridHeaderModel getHeaderModel(Object input)
参数说明 dataGrid的数据集合
返回值 dataGrid的GridHeaderModel
方法描述 获取dataGrid的GridHeaderModel,用于进行表头配置


30.18.3.4. GridRowDataProvider(接口)

DataGrid渲染每一行时,会将每一行的数据传递给getLabel方法,由接口实现者决定如何展示数据。

表 30.54. 方法

getLabel 方法签名 public Object getLabel(Object rowData, GridColumn column)
参数说明 rowData 每一行的数据,column 列信息
返回值 原始返回值
方法描述 得到列数据,如果列指定了Converter,则会自动应用Converter来转换显示的值。


30.18.3.5. ListProviderAdapter

该类继承自GridDataProvider,实现了GridDataProvider中的抽象方法。该类的构造方法需要传入List型的grid数据,,当grid的数据由List型的数据提供时,可用此类作为grid的dataProvider,但要实现服务端排序,需要重写父类的sort()方法

表 30.55. 方法

getElements 方法签名 public abstract Object[] getElements()
参数说明 无参数
返回值 grid的当前页元素
方法描述 获取元素
getElement 方法签名 public abstract Object getElement(int index)
参数说明 rowIndex
返回值 指定的rowIndex对应的数据
方法描述 根据指定的rowIndex获取数据
getTotalCount 方法签名 public abstract int getTotalCount()
参数说明 无参数
返回值 记录总行数
方法描述 得到记录行数


30.18.3.6. ArrayProviderAdapter

该类继承自GridDataProvider,实现了GridDataProvider中的抽象方法。该类的构造方法需要传入Array型的grid数据,当grid的数据由Array型的数据提供时,可用此类作为grid的dataProvider,但要实现服务端排序,需要重写父类的sort()方法

表 30.56. 方法

getElements 方法签名 public abstract Object[] getElements()
参数说明 无参数
返回值 grid的当前页元素
方法描述 获取元素
getElement 方法签名 public abstract Object getElement(int index)
参数说明 rowIndex
返回值 指定的rowIndex对应的数据
方法描述 根据指定的rowIndex获取数据
getTotalCount 方法签名 public abstract int getTotalCount()
参数说明 无参数
返回值 记录总行数
方法描述 得到记录行数


30.18.4. 示例

这个例子介绍了动态EditDataGrid的使用方法,该示例来源自 bpdemos

<w:form>
    <w:editDataGrid id="grid" paged="true" rows="10" toolBarPosition="top" height="400" width="800">
        <w:pagingToolbar>
            <w:separator />
            <w:menu label="数据维护">
                <w:commandMenuItem label="增加" image="../images/new.gif"
                    action="#{datarepresent.grid.dynamic.editableBean.insert}" />
                <w:commandMenuItem label="增加(预填数据)" image="../images/new.gif"
                    action="#{datarepresent.grid.dynamic.editableBean.insertWithData}" />
                <w:commandMenuItem label="删除" image="../images/delete.gif"
                    action="#{datarepresent.grid.dynamic.editableBean.remove}" />
                <w:commandMenuItem label="保存" image="../images/save.gif"
                    action="#{datarepresent.grid.dynamic.editableBean.save}" />
            </w:menu>
            <w:separator />
            <w:button id="add" value="增加" image="../images/new.gif" />
            <w:button id="addWithData" value="增加(预填数据)" image="../images/new.gif" />
            <w:button id="remove" value="删除" image="../images/delete.gif" />
            <w:button id="save" value="保存" image="../images/save.gif" />
        </w:pagingToolbar>
    </w:editDataGrid>
</w:form>

Managed Bean代码:

@ManagedBean(name = "datarepresent.grid.dynamic.editableBean", scope = ManagedBeanScope.REQUEST)
public class EditableBean {
    @Bind(id = "grid")
    private List<Company> getCompanys() {
        return CompanyService.findAll();
    }

    @Bind(id = "grid", attribute = "viewProvider")
    private GridViewProvider viewProvider = new GridViewProvider() {
        public GridColumnModel getColumnModel(Object input) {
            return DynamicGridBeanHelper.createCompanyColumnModel();
        }

        public GridHeaderModel getHeaderModel(Object input) {
            return DynamicGridBeanHelper.createCompanyHeaderModel();
        }

        public GridSelectionModel getSelectionModel(Object input) {
            return new CheckboxSelectionModel();
        }
    };

    @Bind(id = "grid", attribute = "rowDataProvider")
    private GridRowDataProvider rowProvider = DynamicGridBeanHelper.getCompanyRowProvider();

    CompanyService companyService = new CompanyService();

    @Bind(id = "grid")
    private UIEditDataGrid grid;

    @Bind(id = "grid", attribute = "addedData")
    private Object addedData;
    @Bind(id = "grid", attribute = "modifiedData")
    private Object modifiedData;
    @Bind(id = "grid", attribute = "removedData")
    private Object removedData;
    @Bind(id = "grid", attribute = "bindBean")
    private Class bindBean = Company.class;
    
    @BeforeRender
    public void beforeRender(boolean isPostBack) {
        if (!isPostBack) {
            GridColumnModel model = grid.getColumnModel();
            model.getColumn(1).setCellEditor(createCellEditor(UITextField.COMPONENT_TYPE));
            model.getColumn(2).setCellEditor(createCellEditor(UITextField.COMPONENT_TYPE));
            model.getColumn(3).setCellEditor(createCellEditor(UITextField.COMPONENT_TYPE));
            model.getColumn(4).setCellEditor(createCellEditor(UITextField.COMPONENT_TYPE));
            model.getColumn(5).setCellEditor(createCellEditor(UITextField.COMPONENT_TYPE));
        }
    }

    private CellEditor createCellEditor(String componentType) {
        CellEditorAdapter adapter = CellEditorAdapter.getInstance();
        CellEditorFactory fac = adapter.getCellEditorFactory(componentType);
        if (fac instanceof UITextField) {
            ((UITextField) fac).setAllowBlank(false);
        }
        return fac.getCellEditor();
    }

    @Action(id = "add")
    public void insert() {
        grid.insertRow(0);
    }

    @Action(id = "addWithData")
    public void insertWithData() {
        grid.insertRow(0, new Company("4","Microsoft","Windows, Office","天河软件园","http://www.microsoft.com","800 810 1818",""));
    }

    @Action(id = "remove")
    public void remove() {
        grid.remove();
    }

    @Action(id = "save")
    public void save() {
        try {
            if (addedData != null) {
                add((Company[]) addedData);
            }
            if (modifiedData != null) {
                update((Company[]) modifiedData);
            }
            if (removedData != null) {
                remove((Company[]) removedData);
            }
            grid.commit();
            grid.reload();
        } catch (Exception e) {
            throw new FacesException(e);
        }
    }

    private void remove(Company[] companys) {
        for (Company company : companys) {
            companyService.remove(company);
        }
    }

    private void update(Company[] companys) {
        for (Company company : companys) {
            companyService.update(company);
        }
    }

    private void add(Company[] companys) {
        for (Company company : companys) {
            company.setId(UUID.randomUUID().toString());
            companyService.add(company);
        }
    }
}