java开发中的dorado_dorado中的视图实现类和监听器

视图模型实现类(DefaultViewModel.java)的主要功能:

1. Dataset的初始化以及数据导入

2. 各种View组件的初始化工作

DefaultViewModel也是动态创建的,由他来管理dataset的数据分批请求操作以及dataset的数据提交操作

每一次DefaultViewModel.java被创建的时候都会触发该类中的init方法,不同的初始化方式,该方法的参数会有所不同:

init方法的申明如下:

public void init(int state) throws java.lang.Exception

其中state为一个整数值,取值不同代表客户端向服务器端发出的不同类型的请求

页面请求:state为ViewModel.STATE_VIEW

分批数据下载:state为ViewModel.STATE_SERVICE

数据提交:state为ViewModel.STATE_UPDATING

在state为ViewModel.STATE_VIEW期间:

DefaultViewModel.java在读取视图模型xml配置文件时会解析两大类的对象:

Dataset

View组件

DefaultViewModel会自动创建Dataset与Contro对象,并将xml配置中的信息读取到相关对象中,同时自动执行DefaultViewModel的方法:

initDatasets

initControls

开发人员可以通过继承实现这两个方法的实现对dataset以及control的初始化工作。

在state为ViewModel.STATE_SERVICE期间,我们可以继承DefaultViewModel的doLoadData方法自定义实现dataset的数据加载工作。

在state为ViewModel.STATE_UPDATING 期间,我们可以继承DefaultViewModel的doUpdateData方法自定义实现dataset的数据保存工作。

常用开发技巧

1. 根据权限定制菜单的内容

为了实现权限菜单功能,我们可以利用initControls方法定制menu中的内部菜单项

protected void initControls() throwsException {

Menu menu= (Menu)getControl("menu1");//获得视图模型已经定义的menu对象MenuItem item= menu.addItem("value1", "文件");//添加文件子菜单item.addItem("new", "新增");//在文件子菜单中添加下一级的新增子菜单项menu.addItem("value2", "编辑");

menu.addItem("value3", "视图");

menu.addItem("value4", "工具");

}

通过menu对象提供的api我们可以很容易的构造出一个多极菜单。结合权限,我们只要在该处菜单的初始化过程之前获取登录用户的信息,一般的web系统都是通过session对象获取用户的登录信息,这儿也不例外,只是调整为通过dorado的上下文对象获取:

DoradoContext context = DoradoContext();

Object user = context.getAttribute(DoradoContext.SESSION, “sessionKey”);

以上代码和

Object user = session.getAttribute(“sessionKey”);

的效果是一样的。

通过DoradoContext对象我们可以很容易的获取登录系统的用户信息,并据次初始化菜单对象中的菜单项,实现权限管理。

2.根据权限定制按钮的可见性

同开发技巧1一样

Button buttonSave = (Button)getControl(“buttonSave”);// 获得视图模型已经定义的保存数据的按钮对象

buttonSave.setIgnored(true);//设定按钮的逃逸功能为true,这样在JSP打开后,该按钮就不会在客户端显示。

同1那样,如果这儿再添加权限管理,我们可以通过DoradoContext这个上下文对象获取登录用户的信息,并根据这个信息决定是否要设定buttonSave.setIgnored(true)使它逃逸不在客户端输出。

3. 根据查询条件定制dataset的返回结果

监听器(Listener)是基于dataset提供的一个监听和管理dataset对象的创建和查询以及数据保存的动作。事件对应列表:

Dataset事件

Listener事件

init

onInit

createFields

beforeCreateFields

afterCreateFields

loadData

beforeLoadData

afterLoadData

updateData

beforeUpdateData

afterUpdateData

l   boolean beforeCreateFields(Dataset dataset)

当Dataset将要自动创建所有字段之前触发的事件.即当调用Dataset.createFields()之前触发的事件.

l   boolean beforeLoadData(Dataset dataset)

当Dataset将要装载数据之前触发的事件.即当调用Dataset.loadData()之前触发的事件.

l   boolean beforeUpdateData(Dataset dataset)

当Dataset将要装载数据之前触发的事件.即当调用Dataset.update()之前触发的事件.

以上listener的所有before方法都需要提供一个boolean的返回值,dorado根据这个返回值确定是否需要执行默认的initFields,loadData, updateData方法

Dataset与listener之间的关系,由dataset的管理者对象维护,在dorado中一般为视图模型或者数据坞对象,在视图模型或则数据坞中配置dataset对象时,通过listener属性管理监听器对象。

监听器是继承com.bstek.dorado.data.AbstractDatasetListener的实现类。

如果我们想自定义datasetSection的数据导入,对于DB类型的Dataset对象,我们可以通过监听器的beforeLoadData方法动态修改dataset的sql语句,让dataset的loadData方法执行使用beforeLoadData中定义的sql语句执行查询。

这样我们就应该创建一个新的监听器DatasetSectionListener.java继承与com.bstek.dorado.data.AbstractDatasetListener,并实现其中的beforeLoadData方法:

public boolean beforeLoadData(Dataset dataset) throwsException {

String city= DoradoContext.getContext().getAttribute(DoradoContext.VIEW, “city”);//从Dorado的上下文环境中获取城市信息

String sql = “select * from section where city=’+city+”’”;//根据城市拼写地区的sql

SqlDataset sqlDataset = (SqlDataset)dataset;//由于当前操作的对象转换为SqlDataset类型进行操作

sqlDataset.setSql(sql);//对Sql类型Dataset对象设置sql语句

return true;//返回true,通知dataset继续执行默认的标准查询动作,并使用当前设定好的sql语句进行查询

}

最后在视图模型的dataset的xml配置文件中设定dataset的listeners属性,设定的时候要注意要设置listener的全路径,包含java package的申明,如:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值