Skip to content

07.panda dictionary

Bing edited this page Jul 27, 2018 · 1 revision

简介

panda的字典模块包括两部分,panda-dictionary和panda-dictionary-ui,其中panda-dictionary包含了通用的基础类,不依赖于dorado,而panda-dictionary-ui是基于dorado的一种实现。

背景

字典几乎是系统的标配,实现的风格各种个样,但是主体结构是一样的,实现的难度不是很大,在dorado的项目中字典的实现优劣会极大影响开发的效率,为了统一风格,提高开发效率,减少重复开发,panda提供了一个比较好的选择。

字典结构

字典模块一共包含两张表:字典表(panda_dictionary)和字典项表(panda_dictionary_item),一对多的关系。字典就是字典项的分类。字典是自关联的,字典自身是一个树型结构,字典项也是自关联的,也是树型结构。字典表有一个编码字段(code_),开发人员可以通过字典编码来获取编码对应的字典项。字典项包含键(key_)和值(value_)字段, 键用于存放到数据库,值用于对键的翻译,例如键=0,值=男;键=1,值=女。

用法

在后台类中

在后台,我们可以通过spring的依赖注入DictionaryService的实现类来使用字典。例如:

@Autowired
private DictionaryService dictionaryService;

DictionaryService接口说明

public interface DictionaryService {
	
	/**
	 * 根据字典编码获取字典
	 * @param code 字典编码
	 * @return 字典
	 */
	Dictionary getDictionaryBy(String code);
	
	/**
	 * 根据字典编码获取字典的默认字典项
	 * @param code 字典编码
	 * @return 字典项
	 */
	DictionaryItem getDefaultValueItemBy(String code);
	
	/**
	 * 根据字典编码获取字典的默认字典项的值
	 * @param code 字典编码
	 * @return 字典项的值
	 */
	String getDefaultValueBy(String code);
	
	/**
	 * 根据字典编码获取字典的所有字典项(包括字典项的子级字典项的树型结构)
	 * @param code 字典编码
	 * @return 所有字典项
	 */
	List<DictionaryItem> getDictionaryItemsBy(String code);

	/**
	 * 根据字典项的键获取字典项
	 * @param key 字典项的键
	 * @return 字典项
	 */
	DictionaryItem getDictionaryItem(String key);

}

在dorado页面中

字典模块提供了一个dorado的EL表达式(不太了解dorado的EL表达式,请先去了解)上下文变量dict,通过dict,我们可以访问字典相关的服务方法。dict包含五个个方法,

  • dict.items(code) 根据字典编码获取字典的所有字典项(包括字典项的子级字典项的树型结构)
  • dict.defaultValue(code) 根据字典编码获取字典的默认字典项的值
  • dict.defaultKey(code) 根据字典编码获取字典的默认字典项的键
  • dict.defaultValueItem(code) 根据字典编码获取字典的默认字典项
  • dict.item(code) 根据字典项的键获取字典项

dorado的事件里

 var key = ${dict.defaultKey("xxx")};

表单的下拉列表中

大部分情况,我们的业务是通过下拉列表来展现字典项。假如我配了一个性别字典,字典编码为gender,字典包含两个字典项,1.键=0,值=男;2.键=1,值=女。然后,把DataType的性别的PropertyDef的mapValues设置成${dict.items("gender")}即可。进一步,我希望性别属性的默认值为gender字典的默认字典项的键,只需要将性别的PropertyDef的defaultValue设置为${dict.defaultKey('gender')}。