Dorado 5 : 6.3.ViewProperties (RF1)

ViewProperties是一种对于某个View无论在Client端还是Server都可以使用的属性集合, 我们可以利用它来实现Server与Client之间的数据传递.
Client端使用方法: getViewModel(namespace).properties.getValue(key), getViewModel().properties().setValue(key, value)
Server端使用方法: 在ViewModel中利用properties()得到MetaData对象.
在其他非ViewModel的类中使用DoradoContext对象实现ViewProperties的存取,具体实现参考DoradoContext的具体使用。
el表达式: ${ViewProperties.XXX}, ${viewProperties.getString("XXX")}
Studio中可以通过ViewModel根节点中的Properties节点来初始化ViewProperties的值.
当用户在服务器端向集合中添加一个属性时,Dorado会将其放入DoradoContext对象中保存,scope是DoradoConext.View,基于这种机制,在视图模型实现类外,比如在数据集监听器中就可以通过DoradoContext对象的如下方法存取ViewProperties对象:

DoradoContext.getContext().setAttribute(DoradoContext.View, key, value);

在一个标准的dorado的请求中,服务器端ViewProperties属性集合会传递到客户端的getViewModel().properties()对象中,而客户端对getViewModel().properties()集合所作的任何改动,在发出一个dorado的标准请求后,这些信息会自动的发送到服务器并初始化ViewProperties集合。因此可以说在一个dorado的JSP的生命周期中,这两个对象会自动的作同步工作。就类似于dorado JSP页面整个生命周期的全局变量,这也是ViewProperties取名的原因。

服务器同步客户端实现应用

比如在dorado的页面的客户端发出一个更新命令请求,该请求最终会调用ViewModel实现类的doUpdateData()方法,则我们可以这样写:

protected void doUpdateData(ParameterSet parameters, ParameterSet outParameters)
throws Exception {
this.properties().setString("key", new Date().toLocaleString());
super.doUpdateData(parameters, outParameters);
}

在doUpdateData方法中将服务器的当前日期信息保存到ViewProperties对象中,或也可以在数据集监听器的beforeUpdateData()中这样写:

public boolean beforeUpdateData(Dataset dataset)
throws Exception {
DoradoContext.getContext().setAttribute(DoradoContext.VIEW,"key", new Date().toLocaleString());
return true;
}

在更新命令请求结束后,我们就可以通过如下的JavaScript脚本获取服务器生成的数据:

var value = getViewModel().properties().getValue("key");

客户端向服务器端传递数据

在客户端可以在向服务器发出dorado的标准请求时,例如调用Dataset的flushData()方法前将要传递的数据加入ViewProperties中。可以通过如下代码将数据加入ViewProperties中:

getViewModel().properties().setValue("key","value");

服务器端,在视图模型实现类中可以用如下代码获取传入数据:

this.properties().getString("key");

如果是在其他的类中要获取该值,可以用如下代码:

String key = String.valueOf(DoradoContext.getContext().getAttribute(DoradoContext.VIEW,"key"));

此外,在视图模型的配置文件中可以看到有properties的节点,可以在这个节点上添加ViewModel的属性并且可以设置属性的初始值。