2单表CRUD综合样例开发教程

东软集团股份有限公司

基础软件事业部

单表CRUD综合样例开发教程

东软机密

tui

更改履历

版本号

更改时间

更改的

图表和章节号

状态

更改简要描述

更改申

请编号

更改人

批准人

V1.0

2014-11-28

 

N

   

刘玥

 
               
               
               
               
               

注:状态可以为N-新建、A-增加、M-更改、D-删除

目录

第1章 功能说明. 1

第2章 功能详解. 2

2.1 所需模型. 2

2.1.1 ENTITY模型. 2

2.1.2 BO、DAO模型. 3

2.1.3 VIEW模型. 3

2.2 单表CRUD样例制作步骤. 3

2.2.1 新建SC 3

2.2.2 新建DC 4

2.2.3 新建Entity 5

2.2.4 新建VIEW模型. 7

2.2.5 demoUserMgr.view模型开发. 9

2.2.6 demoUserEdit.view模型开发. 24

2.2.7 配置密码框. 31

2.2.8 配置手机号码校验. 32

2.2.9 自定义Codelist 33

第3章 开发效果展示. 36

第1章 功能说明

本教程中包含以下功能点:

1. 使用autoQuery达到无编码查询;

2. XGrid中某列设置成超链接,点击进行页面穿透;

3. 根据日期进行查询;

4. 性别、国籍等代码表的使用;

5. XGrid表格的cell上使用代码表进行转义;

6. 在TitlePane上添加按钮;

7. 使用自适应容器进行上下布局;

8. 使用页面穿透进行数据的新增和修改;

9. 使用必填项校验,电话校验;

10. 使用textbox、dateTextBox、combobox、textarea、密码框。

第2章 功能详解

2.1 所需模型

2.1.1 ENTITY模型

在单表CRUD综合样例开发过程中只用到一个实体模型UpDemoUser,如下图所示:

2.1.2 BO、DAO模型

在单表CRUD综合样例开发过程中的BO模型为demoUserBO,DAO模型为demoUserDAO。下面代码为demoUserBO中的方法列表:

/**

* 更新或保存用户对象

* @param user 用户对象

*/

public UpDemoUser saveOrupdate(UpDemoUser user);

/**

* 删除用户

* @param user 用户对象

*/

public void deleteUser(UpDemoUser user);

2.1.3 VIEW模型

在单表CRUD综合样例开发过程中创建的VIEW模型为demoUserMgr.view和demoUserEdit.view。

2.2 单表CRUD样例制作步骤

2.2.1 新建SC

“framework”上右键 à “新” à “UniEAP软件组件” à “ID”和“名称”输入新建的SC名称à 点击“完成”。如下图所示:

2.2.2 新建DC

在所属SC(这里为“upsample”)上单击右键 à “新” à “UniEAP开发组件” à 在“ID”和“名称”输入新建的DC名称 à 点击“完成”。如下图所示:

2.2.3 新建Entity

“upsample”( SC )à”singletablecrud”(DC )à “metamodel” à “entity”上右键 à “新” à “Entity模型” à 配置数据库连接信息(如下图所示) à 选择“下一步”à 点击“刷新”显示数据库表或视图 à 选择“UP_DEMO_USER”表,“类名”设置为“UpDemoUser”à 点击“完成”。

2.2.4 新建VIEW模型

新建view模型“demoUserMgr.view”:“upsample”( SC ) à “singletablecrud”(DC ) à “metamodel” à “view”上右键 à “新” à “View模型” à 在“文件名”里输入“demoUserMgr”à点击“完成”。如图所示:

新建view模型“demoUserEdit.view”:如下图,方法同上。

2.2.5 demoUserMgr.view模型开发

1. 创建数据集:

打开view模型 à 右下角“数据集”标签页 à 点击“ ”按钮添加数据集 à 如下图完成数据集upDemoUserForm的创建:

à勾选上“支持自动查询”à 将 “生日从”的操作符选为“>=”,“到”的操作符选为“<=”, Form表单中其它选中项的“操作符”选为“like”à 点击“完成”。如下图所示:

类似地,再创建一个数据集 upDemoUserGrid,如下图:

至此demoUserMgr.view页面的数据集创建完毕。

2. 设计页面:

进入“设计”页面 à 选择左侧的“模式控件”à 将模式控件“AdaptiveLayout”拖放到右侧空白页 à 弹出“新建模式控件”页,创建过程如下图:

à 将左侧“模式控件”中的“Form”模式控件拖放到“查询条件”区域的TitlePane上 à 弹出的Form窗口设置如下图:

如图输入FormID à 点击“下一步”à 配置如下图:(可以通过“上移”和“下移”选中行来调整显示顺序;勾选上“是否生成form”)

à从“容器”里拖出一个”Div”放到Form的TitlePane上 à 在该Div的“特性”页中的”type”属性输入“buttons”à 将“基本控件”中的“Button”控件拖入上面的Div中 à 点击按钮上的箭头 à 修改按钮属性如图:( “控件ID” 修改为一个有意义的ID名称,“控件名称”修改成按钮的实际显示名称)

è 类似地,将“模式控件”里的“Grid”模式控件拖入下半区域的TitlePane上 à Grid模式控件的设置如下图:(注意:“Grid控件类型”要选择XGrid;“Grid选择类型”选择“single”单选行)

设置固定列,并选择需要显示的数据列,如下图所示:

è 添加一个Div和两个按钮“新增”和“删除”到下面XGrid的TitlePane上(方法同上)。至此页面制作完成,页面布局如下图所示:

3. 编辑脚本:

3.1“查询”功能脚本

定义一个过程调用getAllUser(),依赖AutoQueryBO如下图:

è 点击getAllUser方法的“成功回调”后的“编辑”à 输入如下代码:

//将查询得到的dataStore绑定到mgrGrid,标准格式:view.grid.setDataStore("id", store);

//{string} id 对应xgrid的id ;

//{object} store 用于初始化xgrid的dataStore

view.grid.setDataStore("mgrGrid", dc.getSingleDataStore());

è 回到“设计”页面 à 点击“查询”按钮上面的小三角图标“ ” à 在弹出的快速设置页面点击“编辑onClick事件”如图:

è 输入代码如下:

//点击“查询”按钮时调用定义的过程调用方法getAllUser,并传入mgrForm的dataStore

view.processor.getAllUser(view.form.getDataStore("mgrForm"));

3.2 “新增”功能脚本:

点击“新增”按钮上的三角图标 à 点击“编辑onClick事件” à输入如下代码:

//页面导航的穿透发起,标准格式:view.navigator.forward("scid", "dcid", "viewPath", "title", dc);

//{string} scid 目标页面所在SC的id ;{string} dcid 目标页面所在DC的id ;{string} viewPath 目标页面所属的路径 ;{string} title 导航主题,用于区分不同的穿透请求;{object || string} dc 穿透携带的数据,支持多种数据格式

view.navigator.forward("upsample", "singletablecrud", "demoUserEdit", "新增人员", null);

3.3 “修改”功能脚本

点击XGrid中的“帐号”列标题 à 点击上面的小三角图标,如图:

à“编辑formatter事件” à 在编辑页面输入如下代码:

//设置该列字段为超链接格式,并定义onclick事件为clickUser方法

//demoUserMgr为当前view名,clickUser是定义的公共方法;

return "<a href=\"#\" onclick=\"javascript:demoUserMgr.clickUser('"

+ inRowIndex + "')\">" + inValue + "</a>";

à新建一个公共方法clickUser,参数为index,方法中输入如下代码:

//页面导航的穿透发起,标准格式:view.navigator.forward("scid", "dcid", "viewPath", "title", dc);

//{string} scid 目标页面所在SC的id ;

//{string} dcid 目标页面所在DC的id ;

//{string} viewPath 目标页面所属的路径 ;

//{string} title 导航主题,用于区分不同的穿透请求;在所有的forward和receiveData中的主题应该唯一

//{object || string} dc 穿透携带的数据,支持多种数据格式;

view.navigator.forward("upsample", "singletablecrud", "demoUserEdit", "修改人员",view.grid.getRows("mgrGrid", index));

3.4 “删除”功能脚本

创建一个BO方法“demoUserBO”:“metamodel”à “bo”右键 à “新”à “BO模型”à “文件名”输入“demoUserBO”à “完成”。

DemoUserBO.java中BO方法定义如下:

/**

* 更新或保存用户对象

* @param user 用户对象

*/

public UpDemoUser saveOrupdate(UpDemoUser user);

/**

* 删除用户

* @param user 用户对象

*/

public void deleteUser(UpDemoUser user);

在DemoUserBOImpl.java中输入如下代码:

private DemoUserDAO demoUserDAO;

/**

* 依赖注入,注入相应的自定义的DAO实例

* @param demoUserDAO

*/

public void setDemoUserDAO(DemoUserDAO demoUserDAO) {

this.demoUserDAO = demoUserDAO;

}

/**

* {@inheritDoc}

*/

public UpDemoUser saveOrupdate(UpDemoUser user) {

UpDemoUser User = demoUserDAO.saveOrUpdateUser(user);

return User;

}

/**

* {@inheritDoc}

*/

public void deleteUser(UpDemoUser user) {

demoUserDAO.deleteUser(user);

}

创建一个新的DAO方法”demoUserDAO”:“metamodel”à “dao”右键 à “新”à “DAO模型”à “文件名”输入“demoUserDAO”à “完成”。

DemoUserDAO.java中编码如下:

/**

* 更新或保存用户对象

* @param user 用户对象

*/

public UpDemoUser saveOrUpdateUser(UpDemoUser user);

/**

* 删除用户

* @param user 用户对象

*/

public void deleteUser(UpDemoUser user);

DemoUserDAOImpl.java中输入如下代码:

/**

* {@inheritDoc}

*/

public void deleteUser(UpDemoUser user) {

this.removeObject(user);

}

/**

* {@inheritDoc}

*/

public UpDemoUser saveOrUpdateUser(UpDemoUser user) {

getHibernateTemplate().saveOrUpdate(user);

return user;

}

定义一个新的“过程调用”delUser如下图:

在上图页面中点击“成功回调”的“编辑”,输入如下代码:

//删除mgrGrid选中的第一行,标准格式:view.grid.deleteRow("id", index);

//{string} id 对应xgrid的id ;

//{number} index 待删除的行索引;不传入此值时,默认删除选中的第一行

view.grid.deleteRow("mgrGrid");

编辑“删除”按钮的onClick事件,输入如下代码:

//MessageBox.confirm带有两个按钮的简单确认对话框

MessageBox.confirm({

//message:文本要显示的内容

message:'是否确认删除',

//onComplete:对话框关闭时要执行的回调函数,这里调用定义的公共方法deleteOnComplete

onComplete: deleteOnComplete,

//点击右上角的图标关闭确认框的时候,会不会触发回调函数,默认会触发,并且回调函数的参数值为"false"

iconCloseComplete: true

});

新建一个公共方法deleteOnComplete,参数为value,方法代码如下:

//用于删除的MessageBox中的onComplete方法,调用定义的delUser方法

//view.grid.getRows("mgrGrid")获得grid中选中的行

if(value==true) view.processor.delUser(view.grid.getRows("mgrGrid"));

2.2.6 demoUserEdit.view模型开发

1. 配置Entity校验:

点击workshop“Entity校验配置”图标“ ”à 找到对应SC(upsample)和DC(singletablecrud)下的对应实体(entity à “upDemoUser.entity”) à配置如图所示:

2. 创建数据集:为该view模型创建数据集upDemoUser如下图:

3. 设计页面:该页面只有一个Form区域,设计过程同demoUserMgr.view。设计页面如下图所示:

4. 编辑脚本:

4.1添加page load()方法:

进入“脚本”页面 à选择page load()方法 à 输入如下代码:

//页面导航的穿透成功,标准格式:view.navigator.receiveData("title", "method");

//{string} title 导航主题,用于区分不同的穿透请求,需要和穿透发起的主题相同;{function} method 穿透成功后调用的方法,可以接收穿透发起时传输的数据

view.navigator.receiveData("新增人员", receiveAddUserData);

view.navigator.receiveData("修改人员", receiveUpdateUserData);

添加公共变量addOrUpdate:进入“脚本”页面 à 选择“全局变量”à 输入如下代码:

//定义全局变量用于标识“新增”或“更新”

var addOrUpdate = '';

添加公共方法receiveAddUserData和receiveUpdateUserData如下:

receiveUpdateUserData公共方法如下图:

4.2 “保存”功能脚本:

新建一个“过程调用”saveOrUpdateUser,如下图所示:

点击“成功回调”的“编辑”,输入如下代码:

//页面导航的返回发起,标准格式:view.navigator.prePage("title", dc);

//{string} title 导航主题,用于区分不同的返回请求;{object || string} dc 返回携带的数据,可以支持多种数据格式

if(addOrUpdate =='add'){

view.navigator.prePage("保存成功", dc);

}else{

view.navigator.prePage("修改成功", dc);

}

在“设计”页面点击“保存”按钮 à “编辑onClick事件”à 输入如下代码:

//判断数据是否发生修改

var form = unieap.byId('editForm');

//对form进行校验,form.validate(false)不显示默认的校验信息

if(!form.validate(false)){

//校验提示信息

var message = "";

if(!message && !unieap.byId("account").getValue()) message = "帐号不能为空!";

if(!message && !unieap.byId("name").getValue()) message = "姓名不能为空!";

if(!message && !unieap.byId("accountEnabled").getValue()) message = "请选择帐号是否启用!";

if(!message && !unieap.byId("accountLocked").getValue()) message = "请选择帐号是否锁定!";

if(unieap.byId("mobileTelephone") && !unieap.byId("mobileTelephone").validator.validate())

message = "请填写格式正确的手机号码!";

//提供简单反馈信息的警告提示框

//title为提示框的标题,message为提示框显示的提示信息, type为提示框的显示图标类型

MessageBox.alert({title:"提示信息",

message: message,

type: "warn"});

}else{

//点击“保存”按钮时,调用定义的saveOrUpdateUser过程保存或更新editForm中的数据

view.processor.saveOrUpdateUser(view.form.getDataStore("editForm"));

}

回到demoUserMgr.view,在其page load()方法中编写如下代码:

//页面导航的返回成功,标准格式:view.navigator.onComplete("title", "method");

//{string} title 导航主题,用于区分不同的返回请求,需要和prePage返回发起的主题相同 且主题应该唯一;

//{function} method 返回成功后调用的方法,可以接收返回发起时传输的数据

view.navigator.onComplete("保存成功", addUserSuccess);

view.navigator.onComplete("修改成功", updateUserSuccess);

在其“公共方法”中定义两个新公共方法:addUserSuccess和updateUserSuccess。

addUserSuccess方法如下图所示:

updateUserSuccess方法如下图所示:

页面脚本开发完毕。

2.2.7 配置密码框

选中图中需要设置成密码框的cell:

在其“特性”的“属性”中,将“password”属性值设为“true”。

2.2.8 配置手机号码校验

单击需要配置校验的cell,如图:

进入其“特性”页 à “属性”à “validatorClass”属性值填写为“unieap.form.MobilePhoneValidator“。如图所示:

手机号码校验(前台校验)配置完成。

2.2.9 自定义Codelist

本样例中需要自定义三个Codelist:demoGenderType,demoNationality和demoValidation。

自定义Codelist的定义方法:进入”管理控制台”à “资源管理”菜单 à “代码表管理” à 点击添加按钮“ ”à 定义新的代码表如下:

demoGenderType:

demoNationality:

demoValidation:

代码表定义完成。

将自定义代码表应用到Form中:

打开demoUserMgr.view的Form,将性别和国籍的编辑类型由“textbox”改成“comboBox”,在对应的“常数代码”列填入上面对应的“代码表名称”,如图:

demoUserEdit.view的Form也做如下修改:

此外,针对上面的Form,通过“上移”和“下移”调整成想要的显示顺序;调整“描述信息”的“编辑类型”为“textarea”,“跨列数”改为5;同样地,“家庭住址”的“跨列数”改为3。

代码表应用到XGrid中:

打开demoUserMgr.view的XGrid,在“常数代码”列填入对应的“代码表名称”,如下图所示:

此外,上图中的“生日”的“显示格式”选择“yyyy-MM-dd”格式;根据需要调整“属性列宽”。

第3章 开发效果展示

1.用户管理页面:

2.用户修改页面:

3.新增用户页面:

posted @ 2019-10-15 09:51  DarJeely  阅读(326)  评论(0编辑  收藏  举报