Dorado学习资料:

Dorado官方教程
Dorado开发问答-官网
Dorado入门教程
Dorado7实战-企业通讯录(初级

本文为Dorado7实战-企业通讯录(初级)笔记
  • 更新Dorado配置规则

在Dorado开发中,我们经常会升级dorado提供的jar包,或引入一些新的 dorado add on。一般情况下升级jar都只要将工程lib下的jar替换就可以。但是在某些特殊情况下:
某个控件新增了几个新的属性,但是IDE的编辑器中无法看到;
dorado-core提供了新的控件,但是IDE中无法看到;
新引入的dorado add on的jar包自带了一些dorado控件,但是IDE中无法看到;
这种情况下我们就必要更新Dorado的规则文件,Dorado的IDE是根据规则文件动态提供控件的编辑界面的。
规则文件的更新办法如下: 首先右键单击工程的根节点,找到其中的更新Dorado配置规则菜单,单击执行规则更新;


  • Container控件

Container是一个容器控件,作为容器型的控件,我们可以在内部加入多个子控件。控件之间的布局关系由Container本身的Layout特 性决定;

将Container控件的Layout属性设置为hbox或其他格式;
hbox为横向布局即加入的子控件将依次横向排列。
vbox为纵向布局即加入的子控件将依次纵向排列。


  • AjaxAaction控件

AjaxAaction控件的service属性中设置的值,我们称之为服务定位表达式,在Dorado7中服务定位表达式是用来描述服务的查找方式, 即Dorado7通过服务定位表达式来查找到具体服务,以便于对服务进行调用


  • @Expose标记

用于Service层
@Expose标记是Dorado7专门提供的标注,用于定义可暴露服务,根据这个规则Dorado7会将这个方法自动注册在 ExposedServiceManager中,其中服务名为:systemInfoService,
服务表达式为:systemInfoService#getSystemInfo。服务名就是SystemInfoService.java在BeanFactory中注册的bean的id,annotation机制会 自动将Ajax的S自动转换为小写字母。


P103
self表示ajaxactionGetSysInfo这个控件自身,returnValue为AjaxAction控件的属性字段,表示Ajax调用结束后Java层返回的结果。
由于 Ajax方法返回的是一个Map对象,在JS中会自动转为JSON对象,这样就可以直接通过 info.product,info.veneor,info.version访问map中的内容。
#labelProduct表示当前页面的labelProduct控件。
view.set("#labelProduct.text",“产品:”+info.product);这句代码则表示设置当前页面控件Id为labelProduct的text属性为后台方法的 相应返回值。


  • 利用Chrome调试工具对js进行调试

通常在项目中我们对js脚本进行调试有以下2种方式:

  1. alert调试法

首先是最原始也是最简单的使用alert,在页面中需要输出需要的变量的地方加上alert函数,将变量弹出显示;
alert方式虽然简单,但是调试繁琐,假如需要监视的变量过多的话,会弹出大量的弹出框,用户体验相当不好。目前alert调试方式我们不推荐使用 。

  1. 浏览器调试工具法

在页面加载完成后,使用【F12】快捷键打开Chrome调试工具,
切换到【Sources】页,在130行用【鼠标左键】打上断点,然后点击页面中的【获取系统信息】按钮后,页面执行到断点处暂停,如下图所示:

我们可以看到res中包含3个变量,如果需要添加监视,点击鼠标右键在弹出菜单中选择【Add to Watch】,添加监视:

在右侧的【Watch Expressions】监视区中可以监控res中的变量:

  1. (强烈推荐)Debugger关键字调试法

方便快捷,不需要在View输出的页面中寻找需要调试的js,这个也是我们强烈推荐大家的调试方式。 我们在需要调试的js中加入debugger关键字,代码如下图所示:

打开Chrome页面加载页面并使用【F12】快捷键打开调试工具后,点击页面中的【获取系统信息】按钮,我们发现断点自动停止在debugger关 键字处:


第4章

  • BDF 创建数据库模型

步骤: P111
step1 在对应的目录(db), 新建 “数据库模型” 文件;
step2 右键,import导入数据库驱动jar;
step3 数据库连接配置,选择数据库表;
step4 右键 “数据库模型” 文件 export JavaBean到已经建好的包中

作用:根据数据库表快速生成javabean;

dbtool数据库建模工具不仅可以用作hibernate实体映射类生成工具,也是一个优秀的数据库建模工具,更多的用法请自 行尝试;


  • HibernateDao

HibernateDao是一个泛型父类,所以必须在子类指定具体的类型
为了开发简便,工程中采用Dorado7提供的Hibernate Add
On扩展,可以通过继承HibernateDao对象来实现自己的业务Dao对象,HibernateDao已经实现了增删改查的基本方法,所以Dao类暂时不需要 编写具体的内容。

configure.properties : 数据库的配置信息;
app-context.xml : 数据源连接配置;
web.xml :


  • Model

参考P125: 配置,创建model,model的控件配置,通过简单Java对象自动创建PropertyDefs;
Dorado7本身是采用基于数据模型驱动的开发模式
DataType就是对数据格式的定义,可类比数据库模式定义语言DDL

如果将一个DataType定义在View的Model节点下,通常说这个DataType是当前View私有的,如果另一个View也想使用相同的DataType就需要 在那个View中再次定义这个DataType。
为了能到达到DataType重用的目的,或者通俗的说全局的DataType,Dorado7专门提供了Model配置文件,通过定义一个专门的Model文件, 在其中添加若干个DataType给整个工程共享使用:

Dorado7工程通过系统配置,预先读取Model文件,并初始化这些DataType信息。相关的配置文件有:dorado-home文件夹下的configure.pro eprties:

配置文件中定义了model.root。最终工程会根据配置寻找相关的Model配置文件,并初始化全局的DataType。如下图:


  • DataSet

DataSet一个数据容器控件。
p131 了解DataSet功能作用?
DataSet,DataType,dataProvider之间关系?

DataSet是一个数据容器控件,在页面上是不可见的,为了展现其中的数据我们需要添加一个可以展现数据的控件对象,如AutoForm。

拓展:
DataSet一个数据容器控件。例如:datasetCompany中可以包含1个到多个Company对象,那么Company对象的结构是怎么样的呢?这是由DataSet的DataType属性定义的。现在我们来定义datasetCompany的 dataType属性,我们选择dataType属性:

DataSet设定DataType属性时,在这个向导窗口需要特别注意Select object
type的选择,如果采用Default就表示当前数据容器DataSet只能包含一个DataType的数据实体,而如果选择Collection就表示它可包 含这个DataType结构的一个Collection集合。
对于DataSet而言这是具有明确区别的,在后期访问DataSet和存取 DataSet中数据的相关代码会有所差别,因此在开发的时候开发人员要明确Select object type属性应该取那个值。

在多数情况下,DataSet中的数据多是以集合形式存储,选择Collection。

info
我们定义的dataProvider跟前面第三章中AjaxAction的service同属于服务定位表达式,dataProvider是Dorado7中常见的数据加载技术,主要用于为DataSet加载数据,本身也是一种Ajax数据加载形式。
companyService#getCompany这个表达式的意思为在Spring的beanFactory中寻找id为companyService的bean,执行其中的get Company方法为datasetCompany提供数据。
companyService# 更多信息可以参考相关链接 DataProvide与DataResolver 。

  • AutoForm

新建并配置AutoForm
datasetCompany是一个数据容器控件,在页面上是不可见的,为了展现其中的数据我们需要添加一个可以展现数据的控件对象,如AutoForm。 在视图中添加AutoForm控件:

note
如果需要设置autoformCompany只读还有另外一种方法,直接设置datasetCompany的readOnly属性为true即可。前面提到AutoForm控件为数据敏感型控件,当其数据来源的DataSet设置为只读时,那么AutoForm自然也变为只读。

这样做的好处在于只要单独设置DataSet的readOnly属性就能控制所有与之绑定的数据敏感控件的只读状态。

  • DataProvider

@DataProvider和是Dorado专门提供的标记,与第三章中提到的@Expose相似,@DataProvider会自动将当前方法对应的服务,根据 一系列约定的规则,在运行时注册成全局的DataProvider放在DataProviderManager的对象中,用以对DataSet提供数据加载服务。 关于详细信息请参考 DataProvider和DataResolver


第5章

Dorado7工程通过系统配置,预先读取Model文件,并初始化这些DataType信息。
相关的配置文件有:dorado-home文件夹下的configure.proeprties:

Model用于管理DataType

在SlEmployee这个dataType上点击鼠标右键选择【通过简单Java对象自动创建PropertyDefs】


  • DataGrid

P144
DataGrid其实就是我们日常开发中使用的表格控件


  • 分页

P147
DataPilot是数据导航条控件,主要用于数据分页导航显示等

对于需要支持分页处理的DataProvider方法,要求必须包含一个Page参数,Page参数是Dorado7中支持分页的一个工具类,采用分页技术处理 后,每次请求一个新的分页数据都会产生一个DataProvider的AJAX请求,在这个请求动作中,客户端会自动上传每页需要加载的数据是多少条(pageSize)和现在需要加载的数据是第几页的(pageNo)。
这些信息都会由DataProvider处理机制自动将信息放在Page对象中,并激活DataProvider方法。这样我们就可以在DataProvider方法中 通过page对象的getPageSize()和getPageNo()方法获取客户端分页请求的基本分页信息。并交给后台做数据查询的DAO做进一步的 处理。处理 后的数据存放在Page对象中,并传递到前台进行展示。


  • 过滤栏查询

P150
note
我们在过滤栏中输入值,敲回车就会执行过滤查询,默认情况下这个查询只针对当前已经加载到浏览器端的数据进行过滤处理即进行基于 当页数据的前台查询,如果我们希望执行持久层层面的过滤查询,则需要将这些参数提交给持久层负责查询的相关DAO对象,数据传递技巧-首先要设置Grid的filterMode为serverSide(默认 clientSide):

  • Criteria对象

P151
(com.bstek.dorado.data.provider.Criteria),这是Provider提供的一个封装对象,用于描述Grid中过滤栏中的查询条件。通过传入查询条件组装查询语句,最终获得查询结果。我们可以通过在代码中打断点验证这一点


第6章
P155
DataType不仅可以在*.model.xml中添加设置,也可以在*.view.xml中添加设置;
DataType可以新建PropertyDef;
可以对PropertyDef添加Validator;

在4.2.8节中提到如果将一个DataType定义在View的Model节点下,那么这个DataType是这个View私有的,DataType支持继承:包括多重继承 ,在本节我们在View中定义的DataType继承models目录中Common.model.xml中定义的SlCompany。

在View私有的【SlCompany】这个DataType下新建2个PropertyDef,并对PropertyDef添加Validator;

note
不建议在公用的DataType的PropertyDef上设置数据校验器或过于私有化的配置,因为DataType的继承特性,可能导致不必要的问题 。

AutoForm空间绑定属性:点击AutoForm控件,例如autoformCompany控件,在弹出菜单中选择【Generate AutoForm Elements】

  • 新增并配置UpdateAction控件

P 161
info
如果想做持久化处理,还需要借助DataResolver技术。
DataResolver与DataProvider类似,也是一个Ajax请求,只是作用与DataProvider相反,DataProvider用于从服务器端获取数据存放在客户端的DataSet中,而
DataResolver技术却是为了将客户端的DataSet中的数据提取出来,并通过AJAX技术上传到服务器端,便于交给后台的DAO做持久化 的处 理工作。
在Dorado7中DataResolver一般都是通过UpdateAction控件来配置的,

为UpdateAction添加子节点UpdateItem,绑定需要提交的DataSet数据集:

info
hbox横向布局中的pack属性表示子控件的对齐方向,有3个属性可选:start,center,end,分别表示按照开始的位置对齐,居中对齐 和按照最后的位置对齐。


第7章
P173

  • 校验器的使用

info
AutoForm控件的createPrivateDataSet属性主要是设置是否要在AutoForm没有实际绑定DataSet时自动创建一个私有的DataSet用 于管理表单数据。
由于Dorado中有很多类似于数据校验、键值映射这样的功能都依赖于DataSet,所以如果仅仅使用简单的Entity绑定,AutoForm必然 是失去一些功能特性。 启用本属性可以让AutoForm自动创建一个私有的DataSet,以便于使用上述各项功能。
对于createPrivateDataSet为true的AutoForm,如果我们通过如下代码获取Entity对象,则它是被这个私有的DataSet所管理的实体 对象。
var entity = autoForm.get(“entity”);

info
ToolBar是工具栏控件,同时也是一个容器控件,一般情况下ToolBar都是用以统一管理界面上的功能按钮或菜单项

info 我们发现在设置按钮的图标时,我们使用了表达式,url(>skin>common/icons.gif)我们称之为资源定位表达式。
作为WEB程序员我们都知道:在我们定义一个URL的时候,如果我们定义一个字符串,其开头以"/“开始(包括Dorado开发当中也会接触到 的,如button的icon也是一个url字符串),则表示从端口号开始计算,而不是以webapp的名字开头,而在很多场景下我们还需要webapp的 名字,为了解决这个问题,很多系统都将这个webapp的名字作为JS变量输出到客户端,然后在客户端拼写最终的URL。
这个做过这方 面开发的人都大概了解这个处理过程。在Dorado7中如果我们的URl以应用开头,则我们只要以”>“开头就可以,对于这种URL,Dorado会自动的帮助你转换为 webapp开头的URL,如:
“>images/icon.gif"将转换为”/appContextPath/images/icon.gif”
另外Dorado中还支持带有skin>前缀的写法,如:"skin>widget.css"将转换为Dorado当前当前皮肤路径下的widget.css的URL。
因为skin是预设的URL前缀代表当前皮肤的跟路径。
那么url(>skin>common/icons.gif)表达式的意思即获取Dorado当前皮肤路径下的common目录中的icons.gif。
表达式后面所跟的参数则是偏移量,在开发中将一些常用图标合并到一张图片中,然后采用图片偏移量的方式来定义图标。名为icons.gi f的图片就是这些图标的集合。
当我们页面上的某一个控件对象希望显示其中的某一个按钮的时候,我们就可以根据图标偏移量动态调整最后两个数字,参考如下的icon tool工具,在这个工具中我们单击图标上图同的位置,可以看到它可以帮助我们自动计算图标的偏移量,以及剪切之后显示的图标内容:
TODO 了解使用Dorado的Icon图标工作 P177


  • DataPilot

TODO
import org.hibernate.annotations.common.util.StringHelper作用功能

P186
note 通过前面几个章节的开发,我们知道如果需要点击按钮触发Action,有2种方式

  1. 设置Button控件的action属性,将Button和Action绑定起来。
  2. 在Button控件的onClick事件中直接动过js调用Action的execute方法
    注意:这2种方式只能使用其中一种,假如你配置了Button的action属性,又在onClick事件里面写了代码,那么action属性将失效。

第8章
P191

  • Dialog控件

Dialog控件是一个容器控件,可以在其内部加入子控件,同时默认是个不可见控件,如果需要显示请设置visible属性为true

info
我们可以发现Dialog控件下有3个节点,分别是Buttons,Children和Tools,
Buttons节点下用于放置Button控件,它们会布局到Dialog控件的下方居中;
Children节点用于放置在Dialog中的子控件,子控件的布局将依据Dialog的布局;
Tools节点用于放置Dialog右上角的工具按钮 另外从三个节点的图标也能看出它们具体作用。

  • 给字体加样式:作用控件Label

调整Label的css样式,找到控件的【style】属性,点击下方的【Add】按钮,给控件增加样式属性,并输入属性值;

  • AutoForm、AutoFormElement控件的使用

AutoForm控件内部元素布局默认为form布局,设置colSpan是使email字段跨列显示,同理rowSpan是跨行显示

dorado.MessageBox.alert(result.errormsg,{title:“提示”,icon:“WARNING”});
note
我们可以发现在dorado.MessageBox.alert这个方法中增加了json格式的参数,这个参数用于修改提示框的标题和显示的图标,具体描 述请参考Dorado7 js doc中
dorado.MessageBox这个静态工具类中对于alert方法和show方法的描述。

P197
/否则弹出返回值中的异常消息提示 dorado.MessageBox.alert(result.errormsg,{title:“提示”,icon:“WARNING”});
note
我们可以发现在dorado.MessageBox.alert这个方法中增加了json格式的参数,这个参数用于修改提示框的标题和显示的图标,具体描 述请参考Dorado7 js doc中dorado.MessageBox这个静态工具类中对于alert方法和show方法的描述。

info
onReady事件:当组件被激活(即真正可用时)时触发的事件。
onKeyDown事件:当控件拥有焦点并且有按键被按下时触发的事件。

P202

  • DoradoContext是Dorado的上下文对象

P202
这就需要了解Dorado7的智能方法适配,所谓智能方法适配是基于"约定优于配置"的设计思路而提供。这样在很多情况下我们不需要方法具有Dorado特性,也不需要引入Dorado的开发规范。
由Dorado7自动判断这个方法中的各个参数以及返回值的用途。这是一种智能化的处理逻辑。这带给 我们的好处:
几乎不需要引入任何Dorado7的API。
按照业务的需要而不是Dorado7的需要来为表现层编写代码。
可以令Dorado7与后台业务逻辑之间的粘合层代码更加简洁、易读。
在前台我们将entity作为参数传递给后台,后台就拿到一个Map参数,让后对loginService这个bean进行方法匹配,假如有方法适配了,那么就执 行其方法。如果没有发现适配的方法,这个时候职能方法适配会将parameters中的参数拆开为username,password,这样就可以发现存在对应 的doLogin方法,并进行调用。并将结果作为loginService调用的结果返回到前台。


第9章
P208

  • 新控件的使用

菜单、提示信息、Frame

P209
通过EL表达式可以获取session中对象的属性,例如${session.getAttribute(‘user’).employeeName}即从session中的user对象中获 取了中文名。关于EL表达式的详细描述


第10章
Dialog控件
P218
通过控件标签为登出菜单和快捷按钮添加事件监听器
在前面章节中提到,Dialog默认是不可见控件,在点击登出菜单或快捷按钮时,才弹出登出确认对话框,因此我们为其设置tags属性,通过控件标 签为控件批量添加onClick事件监听器,在点击登出菜单或者快捷按钮时,将DdialogLogout控件显示出来。

Dorado学习- 企业通讯录初级教程理论部分笔记相关推荐

  1. 《英语语法新思维初级教程》学习笔记(一)名词短语

    参考资料: 1. <英语语法新思维初级教程> ▶ 知识点 ▼ 英语是"固定词序语言(a fixed-word-order language)". ▼ 语言的构造级别分五 ...

  2. 《英语语法新思维初级教程》学习笔记(二)名词

    参考资料: 1. <英语语法新思维初级教程> ▶ 知识点 ▼ 名词是用来表示人.事物.地点以及抽象事物的名称. ▼ 名词通常分为两大类:专有名词(proper noun)和普通名词(com ...

  3. 《英语语法新思维初级教程》学习笔记(三)冠词

    参考资料: 1. <英语语法新思维初级教程> 2. 英语国际英标表 ▶ 知识点 ▼ 限定词的是对名词起限定作用的各类词的总称,具体作用有限定名词所指的范围,对名词起泛指或特指.定量或或不定 ...

  4. html网页设计课程的思维导图,UI设计初级教程学哪些?课程大纲和思维导图分享给你!...

    如果你现在还不会ps一张照片,那么说明你落伍了,如果一个企业没有一个专业的UI设计师,那么这个企业的前端后端产品应该不会太美,所以,UI设计师是一个企业的灵魂,有了设计师,一切都变得更美了,UI设计行 ...

  5. [源码、文档、分享] iOS/iPhone学习系列、代码教程(转)

    iOS/iPhone学习系列.代码教程----~~~持续更新中~~~ http://www.devdiv.com/iOS_iPhone-iOS_iPhone%E5%AD%A6%E4%B9%A0%E7% ...

  6. UI设计初级教程学哪些?课程大纲和思维导图分享给你!

    如果你现在还不会ps一张照片,那么说明你落伍了,如果一个企业没有一个专业的UI设计师,那么这个企业的前端后端产品应该不会太美,所以,UI设计师是一个企业的灵魂,有了设计师,一切都变得更美了,UI设计行 ...

  7. 适合零基础人群学习的Python入门教程

    适合零基础人群学习的Python入门教程学什么?小编为大家准备的Python学习教程,课程主要讲解:Python核心编程.Linux基础.前端开发.Web开发.爬虫开发.大数据.人工智能等内容. Py ...

  8. Verilog初级教程(23)Verilog仿真中的显示任务

    文章目录 前言 正文 Display/Write Tasks Verilog Strobes Verilog Continuous Monitors Verilog Format Specifiers ...

  9. Verilog初级教程(21)Verilog中的延迟控制语句

    文章目录 前言 正文 延迟控制语句 事件控制语句 Named Events Event or operator 往期回顾 参考资料及推荐关注 前言 Verilog中的延迟控制有两种类型–延迟和事件表达 ...

最新文章

  1. pandas基于条件判断更新dataframe中特定数据列数值内容的值(Conditionally updating values in specific pandas Dataframe )
  2. html excel零不显,Excel数值为0不显示的三种解决方法
  3. JavaScript之apply()和call()的区别
  4. 信息学奥赛C++语言:成绩等级
  5. 两个关于JAVA String的小问题
  6. HTML+Jquery实现2022跨年烟花特效,除夕最炫烟花代码,跨年怎能没有烟花
  7. crontab执行脚本发邮件中文乱码,手动执行没有问题
  8. 编译并运行Java文件
  9. CDR9 X4 才是最稳定的经典版本,但是汉字文本对齐方面还是有点欠缺
  10. Android设置屏幕亮度的两种方式
  11. 通过PCF8591读取电压值(AD转换)
  12. Php运行lpush失败,php苹果推送APNS push常用出错和解决方法
  13. 关于爱国者黑客的追踪报道..
  14. SQL Server 2005数据库教程
  15. 10款最佳免费WiFi黑客工具(附传送门)
  16. TransactionScope使用(二)——msdtc不可用
  17. Nmap 扩展(一)
  18. 正则校验:微信号,qq号,邮箱
  19. vue3+aplayer+歌曲信息获取
  20. Latex编写数学公式的常用语法

热门文章

  1. Packet Tracer - 配置扩展 ACL - 场景 1
  2. DFS练习——王子救公主
  3. 70.用Dnsmasq构建DNS服务器
  4. C/C++中的ctime用法总结
  5. 【Redis | 黑马点评 + 思维导图】分布式锁
  6. Linux中cpio是什么?有几种操作模式?
  7. 常见bootloader介绍
  8. python均线斜率_【每日一策】Matlab量化交易策略之 均线拐头配合出场
  9. 【已解决】致命错误:Python.h:没有那个文件或目录
  10. 《罗马革命》豆瓣 9.1 从恺撒大帝到屋大维