本节主要讲解通过将用户输入的查询条件提交至后台,在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:
worddav988903a8ff4078bff547a7b6a0966e4d.png (image/png)
worddav3e2a410a9500858451b24ae59c8f2402.png (image/png)
worddavb5d9e550d4ef10349f5cca2cf01bc340.png (image/png)
worddavf6d9522c8bef055965cc0e8b0d179df9.png (image/png)
worddav15144547dd6b64bbbc5e1b19a02cbc3c.png (image/png)
worddav434c4c7a1e0eecf96936d35f2bc44c17.png (image/png)
worddav491118700bfb7a650bb3cc3b6aa8094b.png (image/png)
worddav274d6ceae736f2acad460b5a0cb082c7.png (image/png)
worddav98d4e1470dd73483ccc6ee688e381765.png (image/png)
worddavd55df6bc587c1a4f3063e9012f8270d3.png (image/png)
worddave633086753316bec3f9e15d690a97e5f.png (image/png)
worddav1b8bbae3e325ca18b6f333724ec11d2b.png (image/png)
worddav3a0ff85edf6cae5198b68c9eeff43ca9.png (image/png)
worddavd6fd5badbddd84b95d43f3127c25f940.png (image/png)
worddavf6ce14ce2417b713192dc43108e73829.png (image/png)
worddav9a384719ea9909a7efec90351e37dce9.png (image/png)
worddav9ca508ac7ef2dbfc21beb87eb59083c9.png (image/png)
worddav3438facf1883c4f42c9574ad199f1be9.png (image/png)
worddav0807db4e44a80b10049fb5352b2bfac3.png (image/png)
worddav20a51c4a7d1b338691d9ee3474545227.png (image/png)
worddav27729f45df1bddc4686390992188a2a7.png (image/png)
worddavfae08f0fc640a15940556a90f8545d50.png (image/png)
worddav0a63c06333c0947dcf7b1a5d42229b31.png (image/png)
worddav2d4721c60da4b0b7d79a260f468cc1ce.png (image/png)
worddav182b26cfc3752c6c077f1ff703f6ffaa.png (image/png)
worddav3bf08f36cf839fda3d06dbddb2452a51.png (image/png)
worddav177243e0bbac1648565b5bcf185b1b72.png (image/png)
worddav874c60d0cdff47eb35fa0dc97e79adf5.png (image/png)
worddav49ec314dd1219f2bed9732c9ce37c902.png (image/png)
worddavd7e80fcd64f3183133e96697dd678ec2.png (image/png)
worddav02d1f5af5cc4105e7274967e6c021f81.png (image/png)
worddavdef48afe3add89771d02201a5997b4de.png (image/png)