【Java框架型项目从入门到装逼】第十四节 查询用户列表展现到页面
这一节,我们来实现一下用户列表搜索,最终的效果如下:

这边我们要使用easyUI给我们提供的datagrid组件。
HTML结构如下
<!-- 数据列表 -->
<table id="grid0" class="easyui-datagrid" title="用户列表" style="width:980px;height:550px"
data-options="pagination:true,pageSize:10,rownumbers:true,fitColumns:true,
singleSelect:false,collapsible:false,url:'getUsers.do'">
<thead>
<tr>
<th data-options="field:'ck',checkbox:true"></th>
<th data-options="field:'username',width:80">用户名</th>
<th data-options="field:'password',width:100">密码</th>
<th data-options="field:'name',width:120">姓名</th>
<th data-options="field:'sex',width:120" >性别</th>
</tr>
</thead>
</table>
注意,姓名和性别的field值已经变更,和数据库保持一致,这一点和之前的代码是不一样的。至于datagrid的具体用法,因为本系列课程不是专门讲前端框架EasyUI,所以我也就不多阐述了。感兴趣的童鞋可以去参考EasyUI的官方文档。
我们这边看到,在 data-options 中设置了 url 为 getUsers.do 。这个代表在刷新页面的时候,就会自动去寻找对应的Controller,然后加载数据。

如图,我们还设置了分页,每页条数为10。
现在我们来看一下控制器部分:
@RequestMapping("/getUsers")
@ResponseBody
public Map<String,Object> getUsers(HttpServletRequest request , HttpServletResponse response,Student student){
System.out.println("开始搜索用户...");
int page = Integer.parseInt(request.getParameter("page")); //第几页
int rows = Integer.parseInt(request.getParameter("rows")); //每页多少行
System.out.println(student);
Map<String,Object> pageBean = userService.getUsers(student,page,rows);
return pageBean;
}
注意,我们在参数列表中加了一个Student:

为什么要添加这个参数呢,那是因为我们最终会通过form表单输入用户名和姓名进行一个模糊查询,所以要在controller层做一个数据绑定。

再看这两个东西,因为datagrid已经设置了分页,所以加载数据的时候就会默认传过来这两个参数,它会自己告诉controller本次请求要查询的是第几页,每页多少条数据?

接下来,我们调用service层的方法,因为是分页查询,所以我们不仅仅要传入需要查询的条件,还要传入分页参数。
最终,我们走到了dao层的方法:
@Override
public Map<String, Object> getUsers(Student student, int page, int rows) {
String sql = "select * from t_student where 1=1 ";
List args = new ArrayList();
if(student.getId() != 0){
sql += " and id = ?";
args.add(student.getId());
}
if(student.getUsername() != null && !"".equals(student.getUsername())){
sql += " and username = ?";
args.add(student.getUsername());
}
if(student.getName() != null && !"".equals(student.getName())){
sql += " and name = ?";
args.add(student.getName());
}
SimpleDao dao = new SimpleDao();
Map<String, Object> pageBean = dao.queryForPage(sql, page, rows, args.toArray());
return pageBean;
}
相信只要你有一定的java基础和jdbc基础,就一定能看懂这个方法做了些什么?没错,我们挨个判断查询条件,如果有传过来,就拼接到sql语句中去。最后,用queryForPage方法去查询一个分页对象过来。
现在,我们来测试一下,刷新index.html。

可以看到,数据成功的载入了我们的datagrid!
接下来,我们给搜索按钮添加点击事件,达到条件查询的目的:
//搜索用户
function searchUser(){
var username = $('#username_search').val(); //用户名
var name = $('#nickname_search').val(); //姓名
$("#grid0").datagrid('load',{
username : username,
name : name
});
}
效果(截图不清晰,请下载后观看):

那如果是模糊查询的话,又该如何实现呢?这个就作为一个小小的作业留给大家,在下一讲我们来揭开答案!
您的支持是我写作的最大动力:

【Java框架型项目从入门到装逼】第十四节 查询用户列表展现到页面的更多相关文章
- 【Java框架型项目从入门到装逼】第四节 - 编写第一个Servlet程序
在开始这一节之前呢,我们还需要把Tomcat配置到Eclipse中,配置的方式很简单,打开Eclipse,Window,Preferences,进入到这个页面: 将Tomcat的安装目录配置到Ecli ...
- 【Java框架型项目从入门到装逼】第七节 - 学生管理系统项目搭建
本次的教程是打算用Spring,SpringMVC以及传统的jdbc技术来制作一个简单的增删改查项目,对用户信息进行增删改查,就这么简单. 1.新建项目 首先,打开eclipse,新建一个web项目. ...
- 【Java框架型项目从入门到装逼】第五节 - 在Servlet中接收和返回数据
在上一节的程序中,我们可以看到HttpServletRequest, HttpServletResponse这两个对象.可以说,这是JavaWeb中至关重要的两个对象.接下来,我们来做一个简短的说明: ...
- 【Java框架型项目从入门到装逼】第六节 - 用ajax请求后台数据
这一节我们来说一下如何用ajax提交请求? 我们先不讲ajax的原理,还是先以实战为主,看一下这个东西到底怎么用的? form表单: <!-- 采用post表单提交 --> <for ...
- 【Java框架型项目从入门到装逼】第十一节 用户新增之把数据传递到后台
让我们继续来做"主线任务",这一节,我们来做具体的用户新增功能.首先,为了简单起见,我把主页面改了一些,改的是列表那一块.删去了一些字段,和数据库表对应一致: 现在,我们要实现一个 ...
- 【Java框架型项目从入门到装逼】第九节 - 数据库建表和CRUD操作
1.新建学生表 这节课我们来把和数据库以及jdbc相关的内容完成,首先,进行数据库建表.数据库呢,我们采用MySQL数据库,我们可以通过navcat之类的管理工具来轻松建表. 首先,我们得建一个数据库 ...
- 【Java框架型项目从入门到装逼】第八节 - 用EasyUI绘制主界面
1.引入资源包 在上一节中,我们把基本的框架都搭好了,用了Spring,SPringMVC.这一节,我们先来画页面,前端框架采用EasyUI来实现. easyui是一种基于jQuery的用户界面插件集 ...
- 【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说
大家好,好久不见,今天我们来一起学习一下关于Spring框架的IOC技术. 控制反转--Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的 ...
- 【Java框架型项目从入门到装逼】第十二节 项目分层
这一节我们开始对项目进行分层,一般来说,一个web项目的层次结构如下图所示: controller层为我们的控制层,用来接收用户的请求,比如新增一个学生的信息,新增的请求最先就是走到这一层.contr ...
随机推荐
- linux中使用Python IDE pycharm教程
今天使用vim编辑Python 并在linux中终端调试的时候,发现每次不是自己想要输出结果的时候,就要用vim编辑代码,再重新回到终端,比较浪费时间.搜索发现pycharm这一个Python ide ...
- Linux磁盘分区/格式化/挂载(树莓派3挂载硬盘)
[前言] 本文将要讲解的功能为Linux环境下对磁盘进行操作.包括分区.格式化.挂载外接移动存储设备等. 该文的写作背景为本人的树莓派需要外接一个固态硬盘作为存储设备,因此,便开始了一系列的折腾. [ ...
- 深度解剖dubbo源码
-----------学习dubbo源码,能给你带来什么好处?----------- 1.提升SOA的微服务架构设计能力 通过读dubbo源码是一条非常不错的通往SOA架构设计之路,毕竟SOA的服 ...
- Video Target Tracking Based on Online Learning—TLD单目标跟踪算法详解
视频目标跟踪问题分析 视频跟踪技术的主要目的是从复杂多变的的背景环境中准确提取相关的目标特征,准确地识别出跟踪目标,并且对目标的位置和姿态等信息精确地定位,为后续目标物体行为分析提供足 ...
- org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression
前言 本文中提到的解决方案,源码地址在:springboot-thymeleaf,希望可以帮你解决问题. 本文中涉及的两个异常为我开发时遇到的,可能和你目前所要处理的bug不同,如果不是同一个问题,希 ...
- JSP最常用的五种内置对象(out,request,response,session,application)
为了简化开发过程,JSP提供了一些内置对象,它们由容器实现和管理.开发者在JSP页面中无需声明,无需实例化就可使用.主要有out,request,response,session,applicatio ...
- Sublime Text 3的常用插件的安装和介绍
Sublime Text 3的插件安装流程 1.安装Sublime Text 3 2.Package Control组件在线安装: 按Ctrl+`或者点击View 下的show console调出co ...
- Rosenblatt感知器
一.定义 Rosenblatt感知器建立在一个线性神经元之上,神经元模型的求和节点计算作用于突触输入的线性组合,同时结合外部作用的偏置,对若干个突触的输入项求和后进行调节. 二.基本计算过程 Rose ...
- loadrunner中如何将MD5加密的值转换为大写
上篇博客中写过如何将MD5加密,但是我们在实际的测试过程中可能需要将加密的结果进行大小写转换.我在这次的测试过程中就遇见了这样的问题, 我在测试时发现开发人员代码传的sign值是大写,而我加密出来的s ...
- #if defined、#if !defined用法
大型程序或者修改别人的程序时,当我们需要定义常量(源文件还是头文件 ),我们就必须返回检查原来此常量是否已经定义, if defined宏 就是用于检测的. 举个例子,如下: #define .... ...