Dorado 9 : 动态全局DataType(sample-center)

在“动态私有DataType”的示例中我们已经介绍了如何咋View中根据数据字典动态的创建或改变DataType,但是由于这样的操作在每一个页面初始化的过程中都会执行一次,所以效率并不会太好。

本例演示了如何通过Java代码动态的创建全局DataType。

本例的做法是在Dorado启动之后,自动的根据数据字典的内容创建一系列全局的DataType。这些动态创建的DataType既可以继承自XML定义的DataType,也可以被XML中的定义的DataType继承。通过这种方式可以使数据字典与DataType的结合变的更加自然。

下面说明基本实现过程。

首先定义一个继承自com.bstek.dorado.core.EngineStartupListener的一个Java类,并配置到Spring运行环境中。

基本结构为:

public class DynaGlobalDataTypeStartupListener extends EngineStartupListener {

	@Override
	public void onStartup() throws Exception {

	}

}

注意要覆盖实现其中的onStartup方法,该方法会在Dorado启动之后,自动调用。我们只要在该方法的内部利用全局DataType的创建规则创建DataType就可以。

在Dorado中提供了一个全局DataType的管理工具类:com.bstek.dorado.data.config.definition.DataTypeDefinitionManager,并在Spring中被注册的BeanId为"dataTypeDefinitionManager",你可以在DynaGlobalDataTypeStartupListener对象中注入这个dataTypeDefinitionManager,之后就可以通过dataTypeDefinitionManager实现全局DataType的管理了。

其中获取全局DataType的方法为:

DataTypeDefinition dataType = dataTypeDefinitionManager.getDefinition("BaseEmployee");

创建DataType的方法为:

DataTypeDefinition dataType = new DataTypeDefinition("BaseEmployee");
dataType.setImplType(Employee.class);
dataTypeDefinitionManager.registerDefinition(dataType);

获取或创建好DataType之后,对DataType属性的赋值或对内部PropertyDef的属性设定,以及增加新的PropertyDef的操作就比较简单了,请参考sample-center中动态私有DataType的使用办法。