在图片附件中有效果图,可以先看一下.
先说下来由:因为不太喜欢zk的tree,也因为数据量实在太大,每次都用tree全部现实出来很耗费性能
所以就想到了google的搜索框,打算自己做一个.
整体思路是这样的:
做一个bandbox,里边包含一个textbox和一个listbox
textbox用于接收搜索的条件
listbox用于显示搜索的内容,选定后反填到bandbox中
step.1---页面(test.zul)
<window id="testWnd" title="test" border="normal"
use="com.test.TestWindow" height="95%">
<grid width="60%">
<columns>
<column label=""/>
<column label=""/>
</columns>
<rows>
<row height="40px" spans="1,2">
名称:
<hbox>
<!--
autodrop属性实现bandbox的自动弹出
constraint属性是对bandbox的验证,其中"no empty"是非空验证
如果你想定义验证后显示的内容只需要"no empty: 你想显示的信息"就可以了
-->
<bandbox id="gxsmc" readonly="true" autodrop="true"
constraint="no empty" width="300px">
<bandpopup>
<hbox>
<label value="输入代码或名称查找:"></label>
<!-- 用于输入搜索条件的textbox
为其添加onChang和onOK事件
目前这个版本需要输入完成后将textbox失去焦点或按回车键才能显示搜索内容
我想做个类似google那种效果的,一直没搞成,所有的事件都试过了
希望高手们帮忙看看
-->
<textbox id="term" onChange="testWnd.initTest(self.value)"
onOK="testWnd.initTest(self.value)"/>
</hbox>
<vbox>
<!-- 用于显示搜索内容的listbox -->
<listbox id="gxsList" width="320px" height="175px">
<listhead>
<listheader label="名称" width="300px" sort="auto" />
</listhead>
</listbox>
<!-- 用于分页的控件 -->
<paging id="gxsPag" pageSize="10"></paging>
</vbox>
</bandpopup>
</bandbox>
<image src="img/Centigrade-Widget-Icons/QuestionmarkButton-16x16.png" tooltip="title"
style="cursor:pointer" popup="title"/>操作说明
</hbox>
</row>
</rows>
</grid>
<popup id="title" width="300px">
<html>
单击左边输入框,输入管辖所代码或管辖所名称<br />
要求代码长度大于4位,名称长度大于2位<br />
输入完成后,按"回车(Enter)键"或"Tab"键选择
</html>
</popup>
</window>
step.2----建立页面use的后台类
public class TestWindow extends Window {
private static final long serialVersionUID = 1L;
public void initTest(final String value) {
//这么做有点笨了,主要是怕sql语句报错,dao中也用了PreparedStatementSetter,主要是以防万一
if (value.contains("'") || value.contains("_")) {
try {
Messagebox.show("包含非法字符","提示",Messagebox.OK,Messagebox.INFORMATION);
return ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//限制输入的条件的长度大于4的时候才去数据查找数据
if (value.getBytes().length >= 4) {
//spring
ApplicationContext ctx =
WebApplicationContextUtils.getRequiredWebApplicationContext(
(ServletContext)getDesktop().getWebApp().getNativeContext());
DtgkService dtgkService = (DtgkService)ctx.getBean("dtgkService");
//获得总条数
int maxNum = dtgkService.getGxsInfoCountByInput(value);
Paging pag = (Paging)getFellow("gxsPag");
pag.setTotalSize(maxNum);
final int PAGE_SIZE = pag.getPageSize();
//显示数据
reDramGxsInfo(value, 0, PAGE_SIZE);
//注册onpaging事件
pag.addEventListener("onPaging", new EventListener() {
public void onEvent(Event event) {
PagingEvent pe = (PagingEvent) event;
int pgno = pe.getActivePage();//页数(从零计算)
int start=pgno * PAGE_SIZE;
int end = start+PAGE_SIZE;
// System.out.println("pgno"+pgno+"\tstart+"+start+"\tend"+end);
reDramGxsInfo(value, start, end);
}
});
}
}
public void reDramGxsInfo(String value, int firstNum, int maxNum) {
final Listbox gxsBox = (Listbox) this.getFellow("gxsList");
gxsBox.getItems().clear();
final Bandbox combo = (Bandbox) this.getFellow("gxsmc");
ApplicationContext ctx =
WebApplicationContextUtils.getRequiredWebApplicationContext(
(ServletContext)getDesktop().getWebApp().getNativeContext());
DtgkService dtgkService = (DtgkService)ctx.getBean("dtgkService");
//根据条件搜索内容
List<Map<String, String>> gxsList = dtgkService.getGxsInfoByInput(value,firstNum,maxNum);
//填充到listbox中
for (Map<String, String> map : gxsList) {
Listitem item = new Listitem();
Listcell lc = new Listcell();
lc.setLabel(map.get("NAME"));
lc.setValue(map.get("CODE"));
lc.setParent(item);
gxsBox.appendChild(item);
}
//为listbox添加select事件,当选中数据后返填到bandbox中
gxsBox.addEventListener(Events.ON_SELECT, new EventListener() {
public void onEvent(Event e) throws Exception {
Listitem item = gxsBox.getSelectedItem();
List<Listcell> cellList = item.getChildren();
for (Listcell lc : cellList) {
combo.setValue(lc.getLabel()+","+lc.getValue());
}
combo.closeDropdown();
}});
}
}
step.3---service的方法就两句话,一块贴出来了
/**
* 获取信息,根据输入框的录入
* @param value
* @param firstNum
* @param maxNum
* @return
*/
public List<Map<String, String>> getGxsInfoByInput(String value, int firstNum, int maxNum) {
return this.userDao.queryGxsByInput(value, firstNum, maxNum);
}
/**
* 获取count
* @param value
* @return
*/
public int getGxsInfoCountByInput(String value) {
return this.userDao.queryGxsCountByInput(value);
}
step.4-----dao
public int queryGxsCountByInput(final String value) {
String sql = "SELECT DISTINCT COUNT(*) FROM " +
"TABLENAME WHERE CODE LIKE '%"+value+"%' OR NAME LIKE '%"+value+"%'";
return this.getJdbcTemplate().queryForInt(sql);
}
public List<Map<String, String>> queryGxsByInput(final String value, int firstNum, int maxNum) {
String sql = "SELECT * FROM (SELECT DISTINCT ROWNUM AS RN, T.CODE,T.NAME FROM " +
"TABLENAME T WHERE T.CODE LIKE ? OR T.NAME LIKE ?) WHERE RN>"+firstNum+" AND RN<="+maxNum;
return this.getJdbcTemplate().query(sql, new PreparedStatementSetter(){
public void setValues(PreparedStatement pst) throws SQLException {
pst.setString(1, "%"+value+"%");
pst.setString(2, "%"+value+"%");
}}, new GxsMapper());
}
protected class GxsMapper implements RowMapper {
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<String, String> gxsMap = new HashMap<String, String>();
gxsMap.put("CODE", rs.getString("CODE"));
gxsMap.put("NAME", rs.getString("NAME"));
return gxsMap;
}
}
写的很烂,希望大家不要拍砖,有什么不对的地方请高手们多指正,谢谢!
还是那句话,希望对大家有所帮助.
- 大小: 8.7 KB
分享到:
相关推荐
- **Radio**: 单选按钮,多个选项中选择一个。 - **Checkbox**: 复选框,多个选项中可以多选。 - **Combobox**: 下拉组合框,结合了下拉列表和输入框的功能。 - **Bandbox**: 结合了按钮和下拉列表的功能。 - **Grid...
基于风光负荷不确定性的微电网两阶段鲁棒优化模型:投资与运行成本的综合考虑及CCG算法的Matlab+Yamilp+CPLEX求解方法,考虑风光负荷的不确定性,构建了微电网两阶段鲁棒优化容量配置模型,第一阶段目标函数为微电网投资成本,第二阶段目标函数为微电网的运行成本。 采用CCG算法求解。 包含非线性项的线性化处理。 程序代码matlab+yamilp+CPLEX ,核心关键词: 微电网; 两阶段鲁棒优化; 容量配置模型; CCG算法; 线性化处理; MATLAB; YAMILP; CPLEX 用分号分隔每个关键词的结果为: 微电网; 两阶段鲁棒优化; 容量配置模型; CCG算法; 线性化处理; MATLAB; Yamilp; CPLEX,微电网鲁棒优化模型:两阶段成本最小化与线性化处理
西门子S7-200PLC在Z35摇臂钻床控制系统中的应用与组态王组态设计研究,98西门子S7-200PLC和组态王组态Z35摇臂钻床控制系统组态设计PLC设计 ,西门子S7-200PLC; 组态王组态; 摇臂钻床控制系统; PLC设计,西门子S7-200PLC与组态王Z35摇臂钻床控制系统组态设计
烟花代码编程python满屏-10.排队接水——我直接把水吸过来.py
基于三菱PLC的喷灌控制系统设计及组态画面实现,No.393 三菱PLC组态王组态画面基于PLC的喷灌控制设计灌溉控制 ,基于三菱PLC; 喷灌控制设计; 组态王组态画面; 灌溉控制。,基于三菱PLC的喷灌控制设计:组态王组态画面应用
基于Dijkstra算法的路径规划Matlab代码:读取黑白色地图并实现图像上的路径规划示例,读取黑白色地图,在图片上进行路径规划matlab代码 路径规划算法基于读图识别的Dijkstra算法 随意设置坐标,规划路径 示例如下 ,读取地图; 路径规划算法; Dijkstra算法; 坐标设置; 规划路径,基于Dijkstra算法的Matlab黑白色地图路径规划代码
融合空间特征的债券图表数据文本检测方法研究.pdf
基于粒子群优化与遗传算法的高速列车横向悬挂模糊PID控制技术研究:s函数建模与仿真分析详解文件,基于粒子群 遗传算法的高速列车横向悬挂模糊PID控制-s函数搭建。 赠word详解文件 ,基于粒子群; 遗传算法; 高速列车横向悬挂; 模糊PID控制; s函数搭建,基于遗传算法的高速列车悬挂PID模糊控制的S函数构建方案
一种基于Retinex的非线性彩色图像增强算法.pdf
基于因式分解的逆合成孔径雷达三维成像技术及序列因子分解法研究,逆合成孔径雷达三维成像,因式分解法,序列因子分解法。 此部分只做了因式分解的工作,假设散射点已经准确提取并得到散射点坐标矩阵,利用因式分解恢复目标三维结构 ,逆合成孔径雷达三维成像; 因式分解法; 序列因子分解; 散射点提取; 散射点坐标矩阵; 恢复目标三维结构。,利用因式分解恢复三维结构:逆合成孔径雷达三维成像技术
MATLAB R2021b环境下深度学习驱动的车道线检测算法研究与应用,MATLAB环境下一种基于深度学习的车道线检测方法 算法运行环境为matlab r2021b,执行基于深度学习的车道线检测。 if batch ~= numBatches lastFrameIdx = miniBatchSize*batch; else 压缩包=数据+程序 ,核心关键词如下: MATLAB环境; 深度学习; 车道线检测; 算法运行环境; 批处理; 压缩包 以上关键词用分号分隔为: MATLAB环境; 深度学习; 车道线检测; 算法运行环境r2021b; 批处理(batch~numBatches); 压缩包(数据+程序) 注意:最后一个关键词“压缩包”并不是直接从您提供的信息中提炼出来的,而是根据您提到的“压缩包=数据+程序”这一句推断出来的。如果这不是您想要的核心关键词,请告诉我,我会进行相应的调整。,MATLAB深度学习车道线检测算法压缩包
西门子S7-200PLC在物料自动称量控制系统中的应用:基于称重配料混合程序的组态设计与王设计PLC程序设计,74基西门子S7-200PLC的物料自动称量控制系统称重配料物料混合程序组态设计组态设计组态王设计plc程序设计 ,核心关键词:西门子S7-200PLC;自动称量控制系统;物料混合程序;组态设计;组态王设计;PLC程序设计。,西门子S7-200PLC物料自动称量控制系统称重配料程序组态设计
优化无人机侦查与目标搜索路径规划:对未知区域进行覆盖并精确寻靶的Matlab代码解析与实践指南。,无人机覆盖搜索路径规划 无人机搜索目标路径规划 无人机侦查路径规划 对未知区域进行覆盖搜索,并且寻找目标 matlab代码有详细注释,可快速上手。 ,核心关键词:无人机; 覆盖搜索路径规划; 搜索目标路径规划; 侦查路径规划; 未知区域覆盖搜索; MATLAB代码注释。,**无人机未知区域覆盖搜索及目标路径规划Matlab代码详解**
shp格式,可直接导入arcgis使用
基于博途软件编程的11层电梯控制系统:文档齐全,优质售后保障的智能运行体验,基于PLC的单部11层电梯控制系统,采用博途软件编写提供画面,文档(含接线图,流程图,IO分配表)及优质的后服务。 最终运行效果,详见上方演示视频 ,核心关键词:PLC控制;11层电梯;博途软件;画面编写;文档资料;接线图;流程图;IO分配表;售后服务;演示视频。,"博途软件控制下的11层电梯系统,高效运行效果详见演示视频"
"飞剪追剪程序:PLC与伺服同步控制完整指南,适合新手学习与参考,包含PLC程序、触摸屏程序及CAD电路图纸",飞剪追剪程序plc程序伺服程序 同步控制 适合新手学习参考 包含PLC程序+触摸屏程序+CAD电路图纸。 ,飞剪追剪程序; PLC程序; 伺服程序; 同步控制; 新手学习参考; PLC程序+触摸屏程序; CAD电路图纸,适合新手的飞剪追剪程序全套教程:PLC+伺服同步控制
使用Matlab编程:无迹卡尔曼滤波算法(UKF)的编写及其在电池SOC估计中的应用,噪声系数自适应优化方案的研究。,使用matlab编写m脚本,编写无迹卡尔曼滤波算法(UKF)估计电池SOC,注释清晰。 卡尔曼滤波算法(EKF)锂电池SOC估计,噪声系数自适应 Matlab ,matlab; 无迹卡尔曼滤波算法(UKF); 电池SOC估计; 注释清晰; 噪声系数自适应。,Matlab无迹卡尔曼滤波(UKF)用于电池SOC估计的代码实现
Ansys LS-DYNA多孔延时起爆与重复起爆模拟的完整过程解析,Ansys ls_dyna多孔延时起爆,重复起爆模拟 全过程 ,Ansys;LS_dyna;多孔延时起爆;重复起爆模拟;全过程,Ansys LS-DYNA多孔延时重复起爆模拟全过程
FPGA驱动双目视觉系统:立体匹配、视差图与深度图生成技术的研究与应用,FPGA双目视觉 立体视觉 视差图 深度图 双目立体匹配sgm sgbm tang 20k 高云fpga usb摄像头采集图像 ,FPGA双目视觉;立体视觉;视差图;深度图;双目立体匹配sgm;sgbm;高云FPGA;USB摄像头图像采集。,基于FPGA的双目视觉系统:立体匹配与深度图生成
整个手套大盘的指数图如下.docx