Dorado on the way
2006年12月25日
今天是圣诞节,进入公司已经四个月了,可是对公司的产品Dorado还几乎是一个门外汉,(我要说明一下,不是我太笨,刚刚进入公司就接受了一个传统项目的开发,再加之学校的事情,在此我想我应该声明一点,我还是一个大四的学生,快结束大学四年的学习了,到最后,乱七八糟的事情实在是太多了,这个报告那个报告的。)
Thomas(我们公司的产品经理),还有范经理,实在是不好意思,还有公司的同事,虽然我比他们中的好多人进入公司都早,可惜我不是最厉害的,至少现在不是。
到上个星期为止,学校的事情基本上已经完了,毕业设计的课题也选了,选的课题是《基于智能Agent的分布式移动计算处理》,本来一开始自作聪明,以为题目为“移动计算”嘛,就是移动设备的计算处理,智能Agent嘛~估计就是一种形式而已,我自从从大学二年级自学Java开始,接触了Java中的JavaSE和JavaEE两个体系,正好可以借此课题,让我对JavaME有所了解,也实现了完成毕业设计的作用。结果后来导师选好了以后,看着导师给的材料,我才知道,我陷入泥潭了~(导师,原谅我这么说,呵呵·)
今天是我真正学习Dorado的第一天,公司给了我一些资料,所以我信心十足,我要赶上公司的其他同事,呵呵~争取超过他们哦~已经习惯了要做到最好,我是不是太自大了??
还是跟我学习Java一样,首先在公司的官方网站(http://www.bstek.com/)下载了Dorado的最近版本,我下载的版本是Dorado-5.0 061129.1132,一并还下载了Dorado 5 快速入门,组件使用技巧,当然还有Dorado的API--我的最爱。
首先看了Benny(我们公司的CTO)录制的两段视频说明,依照Dorado安装自带的doradosample,把dorado的大致功能作了一个讲解说明,个人感觉dorado还是挺有市场前景的,只是需要更大的宣传。
好了,闲话不多说了,开始我的Dorado之旅吧~
首先,需要了解的是:视图模型Dorado开发当中非常重要的对象,它封装了Dorado的界面逻辑和操作逻辑,即主要包含什么数据dataset ,以及这些数据通过什么形式来展现。
下面是我今天学习中,觉得需要注意的一些地方和术语。
2. RecordIterator ri = dataset.recordIterator() ; 获取对dataset的迭代器引用。
3. 对dataset的遍历
1while(ri.hasNext()){
2Record record = ri.nextRecord() ;
3// 对每条记录的操作
4}
5
6 4. 可是通过getControl(“controlName”) ; 获取组件的引用
注意,这里得到的是Control对象,需要进行类型的强制转换。
5. ”Module数据坞”的说明。
1). 数据坞里面的dataset对象可以被不同的视频模型索引用,以达到数据共享的作用。
2). Module不应该包含任何的业务逻辑,这是一种良好的设计模式。
3). Module的创建和销毁由Dorado提供的容器来管理,可以当做一个Singleton来使用。
所以在绝大部分情况下,在Module里面添加非静态的属性都不是正确 (或者是不太明智)的做法。
4). Module中的dataset的创建和销毁使用dorado提供的容器来管理的,但开发人员可以强制通过scope和timeout来定制dataset的
生命周期。
5). scope有三种取值,分别是request (默认),session , application。
需要特别注意的是,在同一个request中连续以不同的pageIndex ,pageSize , parameters的不同组合来获取Module中的dataset,但将获得多个不同的dataset 实例。
6). 如果为了提高效率而将scope设置为application ,则应该注意让此dataset中的数据量不要过大。常用在大型系统中的代码表。
6. 通过dataSet.getCurrent() ; 方法,可以从dataSet获取当前记录。由于dataSet具有
“当前记录”这个,所以大多数操作都是对“当前数据”来说的。
Mapping
1. 所有的Mapping单元都是通过名为global的管理单元来进行管理的。
2. 在请求映射的过程中,dorado有着自己独特的,不同于Struts的映射机制,
例如:对于请求:action=”access.login.d”
access 与对应的controller的名称一致,
而login与对应的action的名称一致。
3. controller的clazz属性所表示的是用于处理这个请求的class ,类似于Struts中的 Action ,而提交的数据,就从Struts 中的ActionFrom转换成了Dorado的dataset.
4. 对于页面的访问安全控制(即只能通过dorado式的请求,而不容许以文件结构路径来访问,即../demo/XX.jsp),可以将view中的safe属性设置为true来控制。
或者通过dorado默认的setting中的security.accessChecher来控制。不过我可以自主创建一个AccessChecker类型的java类来进行控制。但需要将setting.xml里面的 “security.accessChecker”属性修改为自己创建的类路径。
5. 可以通过DoradoContext来访问dorado的上下文信息,并通过标记量来告诉dorado 的上下文从哪里获取需要的变量。
例如,
Object obj = doradoContext.getAttribute(DoradoContext.SESSION,”username”) ;
i18n
1. 你需要在i18n目录下新建一些I18N的properties类型文件。此类文件与java中的
一致,都是以键-值对的形式存在。
2. 在dataset中的Fields里面设置为${Resource.fileName.key}的形式进行设置。这个就
有点类似于JSP2.0中的EL,其中,fileName是资源文件的文件头,不包括_cn_ZH
等类似的字样。而key是在文件中的键。这些都是在系统的setting.xml中的
“common.locale.language”和“common.locale.country ”来进行的配置。同样,你可
以通过修改这两个属性来启用不同的I18N文件。
3. 对于动态更改用户的国际化资源的情况,可以使用
LocalHelper.getLocale(“language”,”country”),
ResourceManager.getInstance().setDefaultLocale(context,
DoradoContext.SESSION,
locale) ; 来设置。
EL
在JSP2.0方面的书籍中有大量的经典介绍,这里就不再记录。
开发时,只需记住Dorado内置的隐式变量,即可。
Skin
1. 皮肤文件夹存放的位置是在skins文件夹下面的。
在使用新皮肤时,只需要修改setting.xml中的view.smartweb2.skin对应的值即可。
2. 同时可以通过修改skin.css文件来修改dorado中的标签库的所有展示风格。
3. 同时也支持传统的JSP开发,即在<head>标签中设置相信的各种属性,以完成让
dorado以用户自定义的形式进行展现。