[关闭]
@gengzhengtao 2015-07-23T09:41:24.000000Z 字数 3312 阅读 1245

枚举

电商平台broadleafCommerce Broadleaf概念 数据与服务模型


Broadleaf提供了两种数据结构存储类似于枚举的数据,BroadleafEnumerationTypeDataDrivenEnumeration.这两个在本质上就是一个字符串值的集合。BroadleafEnumerationType用来提供业务逻辑预定义使用的值,而DataDrivenEnumeration用来提供在像管理控制台下列菜单这种地方提供的一组变量值。

BroadleafEnumerationType

该BroadleafEnumerationType是实现创建预定义的硬编码字符串值的自定义枚举的接口。Broadleaf 框架中的FulfillmentType就是一个例子。FulfillmentType是包含对应FulfillmentGroup类型可用的值。下面是FulfillmentType对于BroadleafEnumerationType是如何实现的:

  1. public class FulfillmentType implements Serializable, BroadleafEnumerationType {
  2. private static final long serialVersionUID = 1L;
  3. private static final Map<String, FulfillmentType> TYPES = new LinkedHashMap<String, FulfillmentType>();
  4. public static final FulfillmentType DIGITAL = new FulfillmentType("DIGITAL", "Digital");
  5. public static final FulfillmentType PHYSICAL_SHIP = new FulfillmentType("PHYSICAL_SHIP", "Physical Ship");
  6. public static final FulfillmentType PHYSICAL_PICKUP = new FulfillmentType("PHYSICAL_PICKUP", "Physical Pickup");
  7. public static final FulfillmentType PHYSICAL_PICKUP_OR_SHIP = new FulfillmentType("PHYSICAL_PICKUP_OR_SHIP", "Physical Pickup or Ship");
  8. public static final FulfillmentType GIFT_CARD = new FulfillmentType("GIFT_CARD", "Gift Card");
  9. @Deprecated
  10. public static final FulfillmentType SHIPPING = new FulfillmentType("SHIPPING", "Shipping");
  11. public static FulfillmentType getInstance(final String type) {
  12. return TYPES.get(type);
  13. }
  14. private String type;
  15. private String friendlyType;

下面是怎么在业务逻辑使用FulfillmentType

  1. if(!FulfillmentType.GIFT_CARD.equals(fulfillmentGroup.getType())) {
  2. shippableFulfillmentGroups++;
  3. }

DataDrivenEnumeration

DataDrivenEnumeration 是一个包含 DataDrivenenumerationValues值列表的实体。DataDrivenEnumerationValue也是一个实体,他提供了一个单一字符串值的结构。与之相反的 BroadleafEnumerationType是使用硬编码的一组值。DataDrivenEnumeration包含了一个可以根据需要进行改变的数据库存储的值。

下面是一个例子:如何使用DataDrivenEnumration创建一个管理控制台的下拉列表,为了使用DataDrivenEnumration给一个管理下拉列表提供的值,@AdminPresentation注解要与@AdminPresentationDataDrivenEnumeration注解一块使用,下面是一个例子:

注意:@AdminPresentation用来指定样式和所属域,AdminPresentationDataDrivenEnumeration用于指定将DataDrivenEnumerationValue特定子集值分配给该字段。

  1. @Column(name = "TAX_CODE")
  2. @AdminPresentation(friendlyName = "SkuImpl_Sku_TaxCode")
  3. @AdminPresentationDataDrivenEnumeration(optionFilterParams = { @OptionFilterParam(param = "type.key", value = "TAX_CODE", paramType = OptionFilterParamType.STRING) })
  4. protected String taxCode;

@AdminPresentationDataDrivenEnumeration注解指定了字段TaxCode将要被分配一个来自DataDrivenEnumerationValue拥有type.key="TAX_CODE"值集合的一个值。管理控制台将显示包含这组值得下拉菜单。

这里是备用的例子,举例说明创建一个下拉列表他的值来自 CategoryImpl.name:

  1. @Column(name = "NAME")
  2. @AdminPresentation(friendlyName = "CategoryImpl_Category_Name")
  3. @AdminPresentationDataDrivenEnumeration(optionListEntity = CategoryImpl.class, optionValueFieldName = "name",
  4. optionDisplayFieldName = "name", optionCanEditValues = true)
  5. protected String name;

@AdminPresentationDataDrivenEnumeration注释指定字段名称将被从所有CategoryImpl.name值的集合中分配一个值(无optionFilterParams被用来细化查询)。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注