
在 OneCode3.0 开发框架中,ComboInput 是一类强大的复合输入组件,它结合了输入框和下拉选择器的特性,能够满足各种复杂的业务需求。本手册将详细介绍 ComboInput 组件的核心注解、使用方法和最佳实践,帮助开发者快速掌握并应用这一组件。
ComboInputComponent 是 OneCode 框架中的复合输入框组件,继承自 FieldComponent<ComboInputProperties, FieldEventEnum>,用于在 UI 界面中提供复合输入功能。该组件支持多种配置选项,能够满足不同的业务需求。
OneCode3.0 最大的改进包括:
@CustomListAnnotationComboBoxAnnotation 作为容器配置只保持容器属性,原有字段属性以 @ComboInputAnnotation 定义,而 caption 等通用字段则由 @CustomAnnotation 定义@CustomListAnnotation 统一管理数据集合,通过 @ComboInputAnnotation 管理字段属性,通过 @CustomAnnotation 管理通用字段,提高了代码的复用性和可维护性@ComboBoxAnnotation 现在只保留容器相关的属性,专注于下拉框的容器配置:
public @interface ComboBoxAnnotation {
String listKey() default "";
String dropImageClass() default "";
int dropListWidth() default 0;
int dropListHeight() default 0;
}@ComboInputAnnotation 负责定义字段相关的属性:
public @interface ComboInputAnnotation {
String expression() default "";
String imageBgSize() default "";
String imageClass() default "";
String iconFontCode() default "";
String unit() default "";
String units() default "";
String tips() default "";
String commandBtn() default "";
String labelCaption() default "";
@NotNull
ComboInputType inputType() default ComboInputType.input;
boolean inputReadonly() default false;
}@CustomAnnotation 包含通用的字段属性,如 caption、id 等:
public @interface CustomAnnotation {
String id() default "";
String caption() default "";
String[] enums() default {};
Class<? extends Enum> enumClass() default Enum.class;
@NotNull
boolean uid() default false;
ComboInputType inputType() default ComboInputType.none;
@NotNull
boolean pid() default false;
boolean captionField() default false;
boolean readonly() default false;
boolean disabled() default false;
String target() default "";
@NotNull
boolean hidden() default false;
int index() default 0;
String tips() default "";
String imageClass() default "";
IconColorEnum iconColor() default IconColorEnum.NONE;
ItemColorEnum itemColor() default ItemColorEnum.NONE;
FontColorEnum fontColor() default FontColorEnum.NONE;
}@CustomListAnnotation 来统一管理数据集合,提高代码复用性@ComboBoxAnnotation@ComboInputAnnotation@CustomAnnotation通过这些改进,您的代码将更加清晰、可维护,并且能够充分利用 OneCode 3.0 的新特性
根据功能和适用场景的不同,ComboInput 相关的注解可以分为以下几类:
CustomAnnotation:配置组件的通用属性,如 id、caption 等ComboBoxAnnotation:配置下拉框组件的容器属性ComboHelpAnnotation:配置帮助下拉框组件的容器属性ComboInputAnnotation:配置下拉框组件的字段属性ComboFileAnnotation:配置文件选择器组件的字段属性ComboImageAnnotation:配置图片下拉框组件的字段属性ComboDateAnnotation:配置日期选择器组件的字段属性ComboGetterAnnotation:配置获取器下拉框组件CustomListAnnotation:配置数据集合@CustomClass(clazz = CustomComboBoxComponent.class,
viewType = CustomViewType.COMBOBOX,
inputType = ComboInputType.combobox,
componentType = ComponentType.ComboInput)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD})
@BeanClass(clazz = ComboxFieldBean.class)
public @interface ComboBoxAnnotation {
String listKey() default "";
String dropImageClass() default "";
int dropListWidth() default 0;
int dropListHeight() default 0;
}字段解释:
listKey:下拉列表数据的键名dropImageClass:下拉图标样式类dropListWidth:下拉列表宽度dropListHeight:下拉列表高度适用场景:用于配置下拉框组件的容器属性,如列表宽度、高度和图标样式等。
@CustomClass(clazz = CustomComboInputComponent.class,
viewType = CustomViewType.COMBOBOX,
inputType = {ComboInputType.input},
componentType = ComponentType.ComboInput)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD})
@BeanClass(clazz = ComboInputFieldBean.class)
public @interface ComboInputAnnotation {
String expression() default "";
String imageBgSize() default "";
String imageClass() default "";
String iconFontCode() default "";
String unit() default "";
String units() default "";
String tips() default "";
String commandBtn() default "";
String labelCaption() default "";
@NotNull
ComboInputType inputType() default ComboInputType.input;
boolean inputReadonly() default false;
}字段解释:
expression:表达式imageBgSize:图片背景大小imageClass:图片样式类iconFontCode:图标字体代码unit:单位units:单位列表tips:提示信息commandBtn:命令按钮labelCaption:标签标题inputType:输入类型inputReadonly:是否只读适用场景:用于配置下拉框组件的字段属性,如输入类型、提示信息和只读状态等。
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD})
@BeanClass(clazz = CustomFieldBean.class)
public @interface CustomAnnotation {
String id() default "";
String caption() default "";
String[] enums() default {};
Class<? extends Enum> enumClass() default Enum.class;
@NotNull
boolean uid() default false;
ComboInputType inputType() default ComboInputType.none;
@NotNull
boolean pid() default false;
boolean captionField() default false;
boolean readonly() default false;
boolean disabled() default false;
String target() default "";
@NotNull
boolean hidden() default false;
int index() default 0;
String tips() default "";
String imageClass() default "";
IconColorEnum iconColor() default IconColorEnum.NONE;
ItemColorEnum itemColor() default ItemColorEnum.NONE;
FontColorEnum fontColor() default FontColorEnum.NONE;
}字段解释:
id:组件的唯一标识符caption:组件的标题enums:枚举值数组enumClass:枚举类uid:是否为唯一标识符inputType:输入类型pid:是否为父标识符captionField:是否为标题字段readonly:是否只读disabled:是否禁用target:目标hidden:是否隐藏index:索引tips:提示信息imageClass:图片样式类iconColor:图标颜色itemColor:项目颜色fontColor:字体颜色适用场景:用于配置组件的通用属性,如ID、标题、是否只读和隐藏状态等。
适用场景:用于配置下拉框组件,支持多选、懒加载和数据绑定等属性设置,特别适合创建下拉选择器。
@CustomClass(clazz = CustomComboInputComponent.class, viewType = CustomViewType.COMBOBOX, inputType = {ComboInputType.file}, componentType = ComponentType.ComboInput)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD})
@BeanClass(clazz = ComboFileFieldBean.class)
public @interface ComboFileAnnotation {
String fileAccept() default "";
boolean fileMultiple() default true;
}字段解释:
id:组件的唯一标识符caption:组件的标题iconFontCode:图标字体代码width:组件的宽度,默认为 18.0emaccept:接受的文件类型,默认为 */*multiple:是否支持多选,默认为 falsemaxSize:最大文件大小,默认为 10485760 (10MB)url:文件上传的URLparams:请求参数fileNameField:文件名字段,默认为 fileNamefileUrlField:文件URL字段,默认为 fileUrl适用场景:用于配置文件选择器组件,支持文件类型、大小限制和多选等属性设置,特别适合创建文件上传界面。
@CustomClass(clazz = CustomComboInputComponent.class, viewType = CustomViewType.COMBOBOX, inputType = {ComboInputType.date, ComboInputType.datetime, ComboInputType.time}, componentType = ComponentType.ComboInput)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD})
@BeanClass(clazz = ComboDateFieldBean.class)
public @interface ComboDateAnnotation {
String dateEditorTpl() default "";
}字段解释:
dateEditorTpl:日期编辑器模板字符串适用场景:用于配置日期选择器组件,支持日期格式、范围和时间显示等属性设置,特别适合创建日期选择界面。
@CustomClass(clazz = CustomComboInputComponent.class, viewType = CustomViewType.COMBOBOX, inputType = {ComboInputType.image}, componentType = ComponentType.ComboInput)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD})
@BeanClass(clazz = ComboImageFieldBean.class)
public @interface ComboImageAnnotation {
String image() default "";
ImagePos imagePos() default ImagePos.center;
}字段解释:
image:默认图片路径imagePos:图片位置,枚举值包括 left、center、right适用场景:用于配置图片下拉框组件,支持默认图片和位置设置,适合创建带图片的选择界面。
@CustomClass(clazz = CustomComboListComponent.class, viewType = CustomViewType.COMBOBOX,
inputType = ComboInputType.helpinput,
componentType = ComponentType.ComboInput)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD})
@BeanClass(clazz = ComboHelpFieldBean.class)
public @interface ComboHelpAnnotation {
String listKey() default "";
String dropImageClass() default "";
int dropListWidth() default 0;
int dropListHeight() default 0;
ComboInputType inputType() default ComboInputType.helpinput;
}字段解释:
listKey:帮助列表数据的键名dropImageClass:下拉图标样式类dropListWidth:下拉列表宽度dropListHeight:下拉列表高度inputType:输入类型,默认为帮助输入类型适用场景:用于配置帮助下拉框组件,支持列表数据键名、图标样式和尺寸设置,适合创建带帮助信息的下拉选择界面。
@CustomClass(clazz = CustomComboListComponent.class, viewType = CustomViewType.COMBOBOX,
inputType = ComboInputType.helpinput,
componentType = ComponentType.ComboInput)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD})
@BeanClass(clazz = ComboHelpFieldBean.class)
public @interface ComboHelpAnnotation {
String listKey() default "";
String dropImageClass() default "";
int dropListWidth() default 0;
int dropListHeight() default 0;
ComboInputType inputType() default ComboInputType.helpinput;
}字段解释:
listKey:帮助列表数据的键名dropImageClass:下拉图标样式类dropListWidth:下拉列表宽度dropListHeight:下拉列表高度inputType:输入类型,默认为帮助输入类型适用场景:用于配置帮助下拉框组件,支持列表数据键名、图标样式和尺寸设置,适合创建带帮助信息的下拉选择界面。
@CustomClass(clazz = CustomComboPopComponent.class, viewType = CustomViewType.COMBOBOX,
inputType = ComboInputType.getter, componentType = ComponentType.ComboInput)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD})
@BeanClass(clazz = ComboGetterFieldBean.class)
public @interface ComboGetterAnnotation {
String parentID() default "";
boolean cachePopWnd() default true;
@NotNull
String width() default "18.0em";
@NotNull
String height() default "5.0em";
String src() default "";
boolean dynLoad() default false;
ComboInputType inputType() default ComboInputType.getter;
Class bindClass() default Void.class;
}字段解释:
parentID:父组件IDcachePopWnd:是否缓存弹出窗口,默认为truewidth:组件宽度,默认为18.0emheight:组件高度,默认为5.0emsrc:数据源URLdynLoad:是否动态加载,默认为falseinputType:输入类型,默认为ComboInputType.getterbindClass:绑定的类,默认为Void.class适用场景:用于配置获取器下拉框组件,支持父组件ID、缓存、尺寸和数据源设置,适合创建需要动态获取数据的下拉选择界面。
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD})
@BeanClass(clazz = CustomListBean.class)
public @interface CustomListAnnotation {
String id() default "";
Class bindClass() default Void.class;
Class<? extends Enum> enumClass() default Enum.class;
@NotNull
boolean dynLoad() default true;
String filter() default "";
String[] enums() default {};
String itemsExpression() default "";
}字段解释:
id:数据集合的唯一标识符bindClass:绑定的类,默认为Void.classenumClass:枚举类,默认为Enum.classdynLoad:是否动态加载,默认为truefilter:过滤条件enums:枚举值数组itemsExpression:项目表达式适用场景:用于配置数据集合,支持动态加载、过滤和枚举值设置,适合创建可复用的数据集合,为各种组件提供数据支持。
使用示例:
// 定义一个数据集合
@CustomListAnnotation(
id = "userList",
bindClass = User.class,
dynLoad = true,
filter = "status=1"
)
public List<User> getUserList() {
// 实现数据获取逻辑
return userService.findAll();
}
// 在组件中使用数据集合
@ComboBoxAnnotation(
id = "userComboBox",
caption = "用户选择",
dataPath = "userList",
textField = "username",
idField = "id"
)
public String userId;通过 @CustomListAnnotation,我们可以将数据集合的定义与组件的定义分离,提高代码的复用性和可维护性。同一个数据集合可以被多个组件引用,避免了数据逻辑的重复实现。
bindClass:绑定类,默认为Void.class适用场景:用于配置获取器下拉框组件,支持父组件关联、弹窗缓存和动态加载设置,适合创建需要关联数据获取的下拉选择界面。
// 下拉框示例 - 结合多个注解
@CustomAnnotation(
id = "userTypeComboBox",
caption = "用户类型"
)
@ComboBoxAnnotation(
listKey = "userTypesList"
)
@ComboInputAnnotation(
inputType = ComboInputType.combobox
)
private String userType;
// 日期选择器示例
@CustomAnnotation(
id = "birthday",
caption = "出生日期"
)
@ComboDateAnnotation(
dateEditorTpl = "yyyy-MM-dd"
)
private Date birthday;
// 文件选择器示例
@CustomAnnotation(
id = "avatar",
caption = "头像上传"
)
@ComboFileAnnotation(
fileAccept = "image/*",
fileMultiple = false
)
private String avatar;
// 数据集合示例
@CustomListAnnotation(
id = "userTypeList",
bindClass = UserType.class,
dynLoad = true,
filter = "status=1"
)
public List<UserType> getUserTypes() {
// 实现数据获取逻辑
return userTypeService.findAll();
}// 带懒加载的下拉框
@CustomAnnotation(
id = "departmentComboBox",
caption = "部门选择"
)
@ComboBoxAnnotation(
listKey = "departmentList"
)
@ComboInputAnnotation(
inputType = ComboInputType.combobox
)
private String departmentId;
// 支持多选的图片下拉框
@CustomAnnotation(
id = "tagSelector",
caption = "标签选择"
)
@ComboImageAnnotation(
image = "/images/tag-default.png",
imagePos = ImagePos.left
)
private List<String> tagIds;
// 关联数据集合的帮助输入框
@CustomAnnotation(
id = "productHelpInput",
caption = "产品帮助"
)
@ComboHelpAnnotation(
listKey = "productList",
dropListWidth = 400
)
private String productId;
// 高级数据集合示例
@CustomListAnnotation(
id = "departmentList",
bindClass = Department.class,
dynLoad = true,
filter = "status=1 and parentId=:parentId",
itemsExpression = "${item.name} (${item.code})"
)
public List<Department> getDepartmentList(String parentId) {
// 实现带参数的数据获取逻辑
return departmentService.findByParentId(parentId);
}@CustomAnnotation、@ComboBoxAnnotation 和 @ComboInputAnnotation 的使用场景id 是唯一的@CustomListAnnotation 的 dynLoad 属性实现动态加载@ComboBoxAnnotation,字段属性使用 @ComboInputAnnotation,通用属性使用 @CustomAnnotationdataPath、textField 和 idField 等属性实现数据绑定@CustomListAnnotation 定义独立的数据集合filter 属性实现数据的动态过滤itemsExpression 属性增强数据的显示格式可以通过以下两种方式实现数据源的动态加载:
ComboBoxAnnotation,设置 listKey 属性指向一个动态加载的数据集合。@CustomAnnotation(
id = "dynamicComboBox",
caption = "动态下拉框"
)
@ComboBoxAnnotation(
listKey = "dynamicDataList"
)
@ComboInputAnnotation(
inputType = ComboInputType.combobox
)
private String dynamicValue;@CustomListAnnotation 定义一个动态加载的数据集合,并在组件中引用它。@CustomListAnnotation(
id = "dynamicDataList",
bindClass = DynamicData.class,
dynLoad = true
)
public List<DynamicData> getDynamicDataList() {
// 实现动态数据获取逻辑
return dynamicDataService.findAll();
}
@CustomAnnotation(
id = "dynamicComboBox",
caption = "动态下拉框"
)
@ComboBoxAnnotation(
listKey = "dynamicDataList"
)
@ComboInputAnnotation(
inputType = ComboInputType.combobox
)
private String dynamicValue;使用 @CustomListAnnotation 可以轻松实现数据集合的共享。只需要定义一个数据集合,然后在多个组件中通过 listKey 属性引用它即可。
// 定义共享的数据集合
@CustomListAnnotation(
id = "sharedList",
bindClass = SharedData.class,
dynLoad = true
)
public List<SharedData> getSharedList() {
return sharedDataService.findAll();
}
// 组件1引用数据集合
@CustomAnnotation(
id = "combo1",
caption = "组件1"
)
@ComboBoxAnnotation(
listKey = "sharedList"
)
@ComboInputAnnotation(
inputType = ComboInputType.combobox
)
private String value1;
// 组件2引用同一个数据集合
@CustomAnnotation(
id = "combo2",
caption = "组件2"
)
@ComboBoxAnnotation(
listKey = "sharedList"
)
@ComboInputAnnotation(
inputType = ComboInputType.combobox
)
private String value2;可以使用 @CustomListAnnotation 的 filter 属性来设置过滤条件。过滤条件可以包含参数,参数值可以从上下文中获取。
@CustomListAnnotation(
id = "filteredList",
bindClass = FilteredData.class,
dynLoad = true,
filter = "status=1 and category=:category"
)
public List<FilteredData> getFilteredList(String category) {
return filteredDataService.findByCategory(category);
}可以使用 @CustomListAnnotation 的 itemsExpression 属性来自定义项目的显示格式。表达式中可以引用项目的属性。
@CustomListAnnotation(
id = "formattedList",
bindClass = FormattedData.class,
dynLoad = true,
itemsExpression = "${item.name} - ${item.description}"
)
public List<FormattedData> getFormattedList() {
return formattedDataService.findAll();
}可以在对应的字段上设置默认值,框架会自动将其绑定到组件上。
@CustomAnnotation(
id = "defaultValueComboBox",
caption = "带默认值的下拉框"
)
@ComboBoxAnnotation(
listKey = "dataList"
)
@ComboInputAnnotation(
inputType = ComboInputType.combobox
)
private String defaultValue = "1";可以在 @ComboInputAnnotation 中设置 inputType 为支持多选的类型,并结合 @CustomAnnotation 的相关属性来实现。
可以通过设置 @ComboInputAnnotation 的 imageClass、iconFontCode 等属性来自定义组件的样式,也可以通过 CSS 来进一步定制。
可以通过监听 FieldEventEnum 中的事件来处理 ComboInput 组件的各种事件,如选择事件、变化事件等。
OneCode3.0 的 ComboInput 组件是一类强大的复合输入组件,它通过丰富的注解配置,能够满足各种复杂的业务需求。本手册介绍了 ComboInput 组件的核心注解、使用方法和最佳实践,希望能够帮助开发者快速掌握并应用这一组件。在实际开发中,建议根据具体的业务需求,合理选择和配置 ComboInput 组件,以提高开发效率和用户体验。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。