本例的性别和称谓都使用了MapValue功能.
通常而言map映射都是应用在被map的key的值并不多情况下,如性别,学历,称谓等。示例图:
mapValue的处理机制通常有三种用法:
- xml配置
- json赋值
- provider赋值
性别(xml赋值)
本例中性别的映射并没有直接配置在视图模型中,而是直接配置到DataSet对应的DataType声明模块中,我们找到工程src中models的demo.model.xml文件,并找到其中Employee的sex的mapValues声明:
XML内容为:
<PropertyDef name="sex" label="性别"> <Property name="mapping"> <Property name="mapValues"> <Collection> <Entity> <Property name="key">true</Property> <Property name="value">Male</Property> </Entity> <Entity> <Property name="key">false</Property> <Property name="value">Female</Property> </Entity> </Collection> </Property> </Property> </PropertyDef>
称谓(provider赋值)
与性别相对固定的形态不一样,在本例中称谓被设计为可以动态维护的信息,这样我们就无法通过<Property name="mapValues">这种固化到xml中的形态进行定义,必须采用一种更灵活的形态动态的从第三方存储中(例如数据库)获取。我们再来看称谓的定义,本例中在视图模型中重新覆盖了原始Employee这个DataType中titleOfCourtesy的定义:
<DataType name="EmployeeX" parent="Employee"> <PropertyDef name="titleOfCourtesy" mapValues='${dorado.getDataProvider("employeeInterceptor#getTitlesOfCourtesy").getResult()}' /> </DataType>
其中的mapValues属性通过视图模型所支持的EL表达式通过一个DataProvider对象提供数据,通过dataProvider服务定位方式,我们可以找到com.bstek.dorado.sample.interceptor.EmployeeInterceptor.其中getTitlesOfCourtesy恰恰就是提供数据的服务方法:
@DataProvider public Map<String, String> getTitlesOfCourtesy() { Map<String, String> mapValue = new LinkedHashMap<String, String>(); mapValue.put("Mr.", "Mister"); mapValue.put("Mrs.", "Mistress"); mapValue.put("Ms.", "Miss"); mapValue.put("Dr.", "Doctor"); return mapValue; }
为便于数据请求,方法声明中要记得添加"@DataProvider"标识.
json赋值
事实上上面的范例中称谓的mapValues我们也可以用json赋值的方式,如:
dataSet1.get("dataType").getPropertyDef("titleOfCourtesy").set("mapping",[ {key:"Mr.", value:"Mister"}, {key:"Mrs.", value:"Mistress"}, {key:"Ms." value:"Miss"}, {key:"Dr.", value:"Doctor"}]);
特别说明
在上述范例中我们都采用了"key"和"value"的关键字,这是mapValue处理机制中Dorado的默认关键字,当实际使用中我们可以通过PropertyDef的keyProperty和valueProperty属性改变这个规则,如:
<PropertyDef name="sex" label="性别"> <Property name="keyProperty">key1</Property> <Property name="valueProperty">value1</Property> <Property name="mapValues"> <Collection> <Entity> <Property name="key1">true</Property> <Property name="value1">Male</Property> </Entity> <Entity> <Property name="key1">false</Property> <Property name="value1">Female</Property> </Entity> </Collection> </Property> </PropertyDef>
上述使用方法中,我们XML赋值和provider赋值都可以通过这种机制实现,但是JSON赋值处理方式中,目前还不支持.其原因XML赋值和Provider赋值的最终处理结果都是在Client端统一为关键字key和value,由于JSON方式是在Client端运行的,此时规则已经统一为key和value.无法再做更改.
Attachments:



