1. 本章任务
机构浏览功能与项目浏览功能大体相似,但是由于机构拥有一个上级机构的自关联字段,处理起来要比项目管理复杂一些。
需要注意的是,机构浏览时需要显示当前机构名称和当前机构上级机构的名称,此处需要联表查询。
2. 新建页面
新建机构管理页departManage.html
,并引入easyui库。
<head>
<meta charset="UTF-8">
<title>机构管理</title>
<link rel="stylesheet" type="text/css" href="easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="easyui/themes/icon.css">
<link rel="stylesheet" type="text/css" href="css/main.css">
<script type="text/javascript" src="easyui/jquery.min.js"></script>
<script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="easyui/locale/easyui-lang-zh_CN.js"></script>
</head>
3. 添加数据表格
页面中添加datagrid数据表格:
<table id="mainTable" title="机构列表" class="easyui-datagrid" url="CoreServlet?method=getDepartPage" pagination="true"
singleSelect="true" fitColumns="true">
<thead>
<tr>
<th data-options="field:'id',width:50">序号</th>
<th data-options="field:'type',width:50" formatter="formatType">类型</th>
<th data-options="field:'name',width:50">名称</th>
<th data-options="field:'parentName',width:100">上级机构</th>
</tr>
</thead>
</table>
注意:
- 开启分页
- 类型这一列由于数据库中存储的是英文,需要转换为对应中文显示,所以添加formatType格式化方法
- 上级机构数据库中只存了parentId,但是页面上我们显示的时候需要显示上级机构名称,此处先写上parentName。后台给网页返回数据时需要添加上级机构名称。
格式化方法代码如下:
// 格式化类型
function formatType(val, row) {
if (val == "school") {
return "学校";
} else if (val == "college") {
return "学院";
} else {
return "班级";
}
}
4. 封装分页查询方法
封装getDepartPage方法,返回分页数据,需要注意的是我们要多返回一个parentName信息。
修改CoreServlet如下:
// 获取机构分页
else if (method.equals("getDepartPage")) {
DepartDao departDao = new DepartDao();
total = departDao.getCount();
result.setTotal(total);
result.setRows(departDao.getPage(page, rows));
}
修改Depart实体类如下,添加parentName信息。
/**
* 机构
*/
public class Depart {
private String id;
private String name;
private String type;
private String parentId;
/**
* 非数据库字段,仅用于关联查询
*/
private String parentName;
}
修改getPage方法,联表查询出parentName返回。
/**
* 分页查询(联表)
*/
public List<Depart> getPage(int page, int rows) throws Exception {
Connection conn = ConnectionUtils.getConnection();
String sql = "select son.*,parent.name as parentName from depart son left join depart parent on son.parentId=parent.id limit ?,?";
QueryRunner runner = new QueryRunner();
Object[] params = { (page - 1) * rows, rows };
List<Depart> departs = runner.query(conn, sql, new BeanListHandler<Depart>(Depart.class), params);
ConnectionUtils.releaseConnection(conn);
return departs;
}
5. 测试
新建一条测试数据 :
INSERT INTO `scholar-system`.`depart`(`id`, `name`, `type`, `parentId`) VALUES (1, '汉东大学', 'school', -1);
此时页面效果如下,注意由于该机构没有上级机构,所以左连接后上级机构名称为NULL,显示为空。