本节主要讲解通过将用户输入的查询条件提交至后台,在Dataset的监听器中动态拼装SQL语句的方式实现条件查询功能。
准备工作
在sample项目的src下新建ViewModel,命名sqlQuery。
图13-30
配置数据集对象
在新建的sqlQuery中Datasets节点下新建SqlDataset。步骤:【Datasets】—>【Insert】—>【SqlDataset】。
图13-31
设置新建SqlDataset的id为datasetEmployee,点击sql属性旁边按钮【Browse...】配置SqlDataset的sql属性。
图13-32
在【Sql Analyzer】窗口空白区输入查询SQL语句,点击【Run】执行该语句查看结果。
图13-33
点击【OK】完成sql属性的配置。
图13-34
执行自动生成列【Auto Create Elements】操作,生成查询结果集Dataset中所有的列对象。步骤:【datasetEmployee】—>【Auto create fields】。
图13-35
生成所有的Field列对象后,设置datasetEmployee中每个Field的label属性值。
name | dataType | label |
---|---|---|
employee_id | string | 员工编号 |
dept_id | string | 部门编号 |
employee_name | string | 员工姓名 |
sex | boolean | 性别 |
birthday | date | 出生日期 |
married | Boolean | 婚否 |
salary | double | 薪资 |
degree | string | 学历 |
string | 电子邮件 | |
web | string | 网址 |
cmnt | sting | 备注 |
image | string | 其他 |
表13-03
配置展现形式
在【Controls】节点下新建DataTable控件,命名tableEmployee,并绑定datasetEmployee。
图13-36
配置条件输入部分
在【Datasets】节点下新建FormDataset,命名datasetConditions。然后新建AutoForm控件绑定datasetConditions。之后新建Button控件命名buttonSqlQuery,设置Button的value属性值为"查询"。
图13-37
新建sqlQuery相关JSP页面,命名sql_query.jsp。
图13-38
保存全部修改,通过【Browse】查看页面效果。
图13-39
编写客户端事件代码
在buttonSqlQuery控件的onClick事件中编写执行查询的JavaScript脚本代码。
if(datasetConditions.getCurrent()){ var record=datasetConditions.getCurrent(); datasetEmployee.parameters().setValue("EMPLOYEE_ID",record.getValue("EMPLOYEE_ID")); datasetEmployee.parameters().setValue("EMPLOYEE_NAME",record.getValue("EMPLOYEE_NAME")); datasetEmployee.parameters().setValue("SALARYMin",record.getValue("SALARYMin")); datasetEmployee.parameters().setValue("SALARYMax",record.getValue("SALARYMax")); datasetEmployee.flushData(); }
图13-40
创建监听器编写服务器端代码
新建datasetEmployee的监听器。步骤:【Datasets】—>【datasetEmployee】—>【Open Listener】。
图13-41
默认监听器类名为EmployeeDatasetListener。
图13-42
点击【Finish】完成监听器的创建。
图13-43
打开监听器类EmployeeDatasetListener.java。
图13-44
重载beforeLoadData方法。步骤:【选中AbstractDatasetListener右键】—>【Source】—>【Override/Implement Methods...】。
图13-45
在【Override/Implement Methods】窗口中,选中beforeLoadData(Dataset)重载该方法。
图13-46
点击【OK】,完成方法重载的配置。
图13-47
在beforeLoadData方法中编写Java处理代码。
public boolean beforeLoadData(Dataset dataset) throws Exception { // TODO Auto-generated method stub String employee_id=dataset.parameters().getString("EMPLOYEE_ID"); String employee_name=dataset.parameters().getString("EMPLOYEE_NAME"); String salaryMin=dataset.parameters().getString("SALARYMin"); String salaryMax=dataset.parameters().getString("SALARYMax"); SqlDataset datasetEmployee=(SqlDataset)dataset; String sql=datasetEmployee.getSql(); if(StringHelper.isNotEmpty(employee_id)){ sql=sql+" and employee_id='"employee_id"'"; } if(StringHelper.isNotEmpty(employee_name)){ sql=sql+" and employee_name like '%"employee_name"%'"; } if(salaryMin!=null){ sql=sql+" and salary >"+salaryMin.toString(); } if(salaryMax!=null){ sql=sql+" and salary <"+salaryMax.toString(); } System.out.println("========="+sql); datasetEmployee.setSql(sql); return super.beforeLoadData(dataset); }
图13-48
代码编写完成后,全部保存,编译EmployeeDatasetListener.java。编译完成后,刷新JSP页面,查看控制台打印日志信息。
图13-49
查看此时页面效果。
图13-50
在EMPLOYEE_ID文本框中输入"ANLIN",点击【查询】,查看页面效果。
图13-51
查看此时控制台打印日志信息。
图13-52
删除"ANLIN",在SALARYMin文本框中输入"3000",在SALARYMax中输入"5000",点击【查询】,查看页面查询效果。
图13-53
查看此时控制台打印日志信息。
图13-54
开发步骤
通过flushData方法,将浏览器端的Dataset数据集对象中的参数集提交至服务器端,重构Dataset对象,触发beforeLoadData监听器事件,最终实现利用提交的参数值动态拼装SQL语句达到查询的目的。
|
|
|
|
|
|
|
|
|
|
|
|
Attachments:
































