Dorado 5 : 6.5.扩展默认实现类 (RF1)

扩展默认视图模型实现类是指开发人员自定义一个java类,并通过这个类自定义视图模型组件初试化与数据的分批下载和批量数据提交功能,在项目开发时会被广泛的使用。编写一个视图模型实现类,通过扩展视图模型的默认实现类相关的方法可以为系统增加一些全局性的功能或者特性。

简介

自定义视图模型的实现类需要继承com.bstek.dorado.view.impl.DynaViewModel类,它是系统默认的视图模型实现类,这个类被定义在setting.xml中的"view.defaultViewModel"中,要替换默认实现类只需要将配置中的"com.bstek.dorado.view.impl.DynaViewModel"改成自己的实现类。在JTA事务管理中就有这种应用。
默认情况下所有的视图模型都必然拥有一个视图模型的实现类,如果在视图模型的xml配置文件中没有申明过,系统会自动的将DynaViewModel作为默认实现类。并由这个文件负责读取xml配置信息,负责各个组件的创建和dataset的处理。
自定义视图模型实现类之后,需要通过视图模型的xml配置文件将两者关联,例如dorado中的CustomDropDown类型的ViewModel对象,默认的xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<view clazz="com.bstek.dorado.view.control.dropdown.CustomDropDownViewModel">
<Datasets />
<Controls />
</view>

视图模型xml配置文件通过其clazz属性指定其具体实现类,如未指定则系统自动创建DynaViewModel并作为视图模型的实现类。
从上面的代码中可以看出,dorado中CustomDropDown类型的ViewModel对象就是利用了视图模型实现类的自定义功能扩展而成。

范例说明

例如实现视图模型的访问控制:任何基于视图模型的数据提交都要先确认用户是否已经登陆,否则不予处理。

自定义一个视图模型的实现类

新建Java类BaseViewModel,继承默认的DynaViewModel类,并覆盖其默认的数据提交方法doUpdateData():

public class BaseViewModel extends DynaViewModel {

protected void doUpdateData(ParameterSet parameters, ParameterSet ourParameters) throws Exception {
DoradoContext context = DoradoContext.getContext();
Object roleObject = context.getAttribute(DoradoContext.SESSION, "role");
if(roleObject!=null){
super.doUpdateData(parameters, ourParameters);
}
else{
throw new Exception("您未登陆系统,无法实现数据保存!");
}
}

}

在doUpdate方法内部通过DoradoContext对象判断Session中是否存在登陆用户的信息,否则就不做提交处理。

修改系统默认的视图模型实现类

为了使整个系统所有的视图模型都具有这种特性,修改setting.xml文件:

<property name="view.defaultViewModel" value="sample.BaseViewModel"/>