
在企业级应用开发中,表格组件是数据展示与交互的核心载体。OneCode 平台自研的 Grid 表格组件,以模型驱动设计为核心,通过可视化配置与代码注解的深度融合,实现了从基础数据展示到复杂业务交互的全场景覆盖。本文将从功能特性、运行原理、注解配置及 DSM 领域建模管理四个维度,全面解析这款工业级表格组件的技术实现。

@CustomAnnotation(caption="部门名称")
@GridColItemAnnotation(width="8.03em",flexSize=true)
public String getOrgName();

(1)元数据驱动渲染
(2)事件响应体系
(3)性能优化技术
1. @GridAnnotation
作用范围:类级别注解,用于定义表格组件的整体配置 属性说明:
属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
customMenu | GridMenu[] | {} | 自定义菜单选项 |
bottombarMenu | GridMenu[] | {} | 底部工具栏菜单 |
event | CustomGridEvent[] | {} | 绑定的表格事件 |
isFormField | boolean | true | 是否作为表单字段 |
togglePlaceholder | boolean | true | 是否显示切换占位符 |
directInput | boolean | true | 是否允许直接输入 |
rowResizer | boolean | false | 是否允许行高调整 |
colResizer | boolean | true | 是否允许列宽调整 |
colSortable | boolean | true | 是否允许列排序 |
altRowsBg | boolean | true | 是否显示交替行背景色 |
showHeader | boolean | true | 是否显示表头 |
dock | Dock | Dock.fill | 表格停靠方式 |
uidColumn | String | “” | UID列名 |
valueSeparator | String | “;” | 值分隔符 |
rowHeight | String | “3.0em” | 行高 |
bindTypes | ComponentType[] | {ComponentType.TreeGrid} | 绑定的组件类型 |
2. @GridColItemAnnotation
作用范围:字段或方法级别注解,用于定义表格列的具体属性 属性说明:
属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
title | String | “” | 列标题 |
width | String | “8em” | 列宽度 |
editable | boolean | false | 是否可编辑 |
enumClass | Class<? extends Enum> | Enum.class | 枚举类 |
inputType | ComboInputType | ComboInputType.input | 输入框类型 |
flexSize | boolean | false | 是否启用弹性尺寸 |
headerStyle | String | “” | 表头样式 |
colResizer | boolean | false | 是否允许列宽调整 |
3. @GridEvent
作用范围:方法、字段或类级别,用于绑定表格事件处理逻辑 属性说明:
属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
eventEnum | GridEventEnum | - | 事件枚举类型,如onClickGridHandler、beforeGridValueCalculated等 |
expression | String | “true” | 事件触发条件表达式 |
customActions | CustomGridAction[] | {} | 自定义操作集合 |
actions | CustomAction[] | {} | 关联的操作 |
event | CustomGridEvent[] | {} | 自定义事件类型 |
1. GridMenu枚举
描述:定义表格支持的菜单操作类型 枚举值:
2. CustomGridAction枚举
描述:定义表格支持的自定义操作类型 枚举值:
3. GridEventEnum枚举
描述:定义表格支持的事件类型 枚举值:
4. GridRowMenu枚举
描述:定义表格行菜单操作类型 枚举值:
5. GridColItemAnnotation相关枚举
ComboInputType:
代码示例
// 表格定义示例
@GridAnnotation(
customMenu = {GridMenu.Add, GridMenu.Delete},
event = {CustomGridEvent.editor, CustomGridEvent.sort},
dock = Dock.fill,
rowHeight = "3.5em"
)
public class UserGridViewBean extends CustomGridViewBean {
// 表格实现
}
// 列属性配置示例
public class UserInfoBean {
@GridColItemAnnotation(title = "用户名", width = "12em", editable = true)
private String userName;
@GridColItemAnnotation(title = "状态", enumClass = StatusEnum.class, inputType = ComboInputType.select)
private String status;
}列表视图,主要由两部分来组成,领域服务主要负责,实体相关属性以及路由动作相关的操作。由领域设计完成相关的应用。

列表视图组成

展示样例
视图配置是本文主要讲解的部分,在列表配置中,主要由模块配置和子域配置两个部分组成。

视图配置组成

主要负责列表视图的基本属性配置以及跟业务想相关的操作动作配置。

模块配置
在模块构建时通常是在特定环境下运行的,这些特性环境一般是由,聚合实体以及聚合跟的组件值配合当前用户等环境值对象来完成。在列表视图中如果需要添加环境变量,只需要在视图类中添加。
相应的 聚合KEY 并且在字段上添加@Pid,或者@Uid (参考下面具体示例),Uid 代表当前实体的组件值。Pid则是来自于父级以及环境变量值。添加注解后,OneCode解析器会自动关联当前环境并在运行时进行赋值。
常用注解示例
注解名称 | 用途 | 示例 |
|---|---|---|
@Pid | 环境变量,父级全局 | @Pid |
@Uid | 环境变量,当前主键 | @Uid |
@CustomAnnotation | 自定义隐藏域 | @CustomAnnotation(hidden = true) |

配置界面
(3) 列表视图配置:

视图配置主要是列表本身以及其相关操作栏的设定。
分页栏配置

工具栏配置

工具栏
模块底部按钮栏

常用注解示例
注解名称 | 用途 | 示例 |
|---|---|---|
GridAnnotation | 列表视图配置 | @GridAnnotation(rowHeight = "4em", customService = {LocalFormulaService.class}, event = CustomGridEvent.editor) |
PageBar | 分页栏 | @PageBar(pageCount = 100) |
ToolBarMenu | 工具栏 | @ToolBarMenu |
MenuBarMenu | 菜单栏 | @MenuBarMenu |
BottomBarMenu | 底部工具栏 | @BottomBarMenu |

在实际应用中,列表通常是以独立的模块来呈现,但在用户在操作时会涉及到操作行甚至操作到表格应用。


行子域概览
在行集域属性配置时,通常会根据数据实体的域事件来匹配相关的功能按钮。如:实体操作中,常见的CRUD事件,则会自动在行按钮上匹配上删除图标,在行头设定上启动,增加行标记。如果记录集允许弹出编辑这会对应添加双击编辑事件。

域属性图

行域操作

实际表格域划分示例
常用事件添加管理

注解名称 | 用途 | 实例 |
|---|---|---|
@GridRowCmd | 表格行按钮 | @GridRowCmd(tagCmdsAlign = TagCmdsAlign.left, menuClass = {DBColAction.class}) |
@RowHead | 行头配置 | @RowHead(selMode = SelModeType.none, gridHandlerCaption = "删除|排序", rowHandlerWidth = "10em", rowNumbered = false) |
@PageBar(pageCount = 100)
@RowHead(selMode = SelModeType.none, gridHandlerCaption = "删除|排序", rowHandlerWidth = "10em", rowNumbered = false)
@GridRowCmd(tagCmdsAlign = TagCmdsAlign.left, menuClass = {DBColAction.class})
@GridAnnotation(customService = {ColService.class}, customMenu = {GridMenu.Reload, GridMenu.Add}, event = CustomGridEvent.editor)
public class DbColGridView {
@CustomAnnotation(caption = "字段名", uid = true, required = true)
private String name;
@CustomAnnotation(caption = "类型", required = true)
private ColType type = ColType.VARCHAR;
@CustomAnnotation(caption = "长度", required = true)
private Integer length = 20;
@CustomAnnotation(caption = "数字精度")
private Integer fractions = 0;
@CustomAnnotation(caption = "是否主键")
private Boolean pk;
@CustomAnnotation(caption = "是否可为空")
private Boolean canNull = true;
@CustomAnnotation(colSpan = -1, caption = "注解", rowHeight = "100", required = true)
private String cnname;
}当表格属性设置为可以编辑域时,列表会以列为单位转换位,列表表单视图。单元格应用更多的会涉及到表单的相关操作,会在后续表单章节中做近一步的介绍。

单元格编辑

单元格类型

案例:供应链订单管理表格
需求:
实现方案:
OneCode Grid 表格组件通过注解驱动 + 元数据管理 + 可视化建模的三维架构,实现了从简单列表到复杂数据中台的全场景覆盖。其核心价值在于:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。