3.2.9.3.2. 属性类型
平台支持以下开箱即用的属性类型:
-
String, 原始类型及其封装类型(boolean、Boolean、int、Integer等) -
enum,属性值作为枚举的值名称存储在文件或数据库中。如果枚举实现了
EnumClass接口并且具有用于通过标识符获取值的静态方法fromId(),则可以使用@EnumStore注解指定存储枚举标识符而不是具体值。例如:@Property("myapp.defaultCustomerGrade") @DefaultInteger(10) @EnumStore(EnumStoreMode.ID) CustomerGrade getDefaultCustomerGrade(); @EnumStore(EnumStoreMode.ID) void setDefaultCustomerGrade(CustomerGrade grade); -
持久化实体类。访问实体类型的属性时,将从数据库加载由属性值定义的实例。
要支持任意类型,请使用 TypeStringify 和 TypeFactory 类将值转换为字符串或从字符串转换值,并使用 @Stringify 和 @Factory 注解为属性指定这些类。
我们以 UUID 类型为例来了解这个过程。
-
创建类
com.haulmont.cuba.core.config.type.UuidTypeFactory继承于com.haulmont.cuba.core.config.type.TypeFactory类 并实现下面的方法:public Object build(String string) { if (string == null) { return null; } return UUID.fromString(string); } -
在这种情况下没有必要创建
TypeStringify,因为有toString()方法。 -
在配置接口中注解属性:
@Factory(factory = UuidTypeFactory.class) UUID getUuidProp(); void setUuidProp(UUID value);
平台为以下类型提供了 TypeFactory 和 Stringify 实现:
-
UUID–UuidTypeFactory, 如上所述。TypeStringify冗余了,可以直接使用UUID的toString()方法。 -
java.util.Date–DateFactory和DateStringify。日期值必须以yyyy-MM-dd HH:mm:ss.SSS格式指定,例如:cuba.test.dateProp = 2013-12-12 00:00:00.000在配置接口中定义一个
date属性的示例:@Property("cuba.test.dateProp") @Factory(factory = DateFactory.class) @Stringify(stringify = DateStringify.class) Date getDateProp(); void setDateProp(Date date); -
List<Integer>(整数列表) –IntegerListTypeFactory和IntegerListStringify。必须以数字的形式指定属性值,用空格分隔,例如:cuba.test.integerListProp = 1 2 3在配置接口中定义一个
List<Integer>属性的示例:@Property("cuba.test.integerListProp") @Factory(factory = IntegerListTypeFactory.class) @Stringify(stringify = IntegerListStringify.class) List<Integer> getIntegerListProp(); void setIntegerListProp(List<Integer> list); -
List<String>(字符串列表) –StringListTypeFactory和StringListStringify。必须将属性值指定为由 "|" 分隔的字符串列表,例如:cuba.test.stringListProp = aaa|bbb|ccc在配置接口中定义一个
List<String>属性的示例:@Property("cuba.test.stringListProp") @Factory(factory = StringListTypeFactory.class) @Stringify(stringify = StringListStringify.class) List<String> getStringListProp(); void setStringListProp(List<String> list);