1. 本章任务
前期已完成以下功能开发:
登录
后台管理主页面
奖助学金项目管理
机构管理
人员管理
角色权限管理
今天来开发问题反馈功能。问题反馈是指学生提出反馈问题,并且查看反馈问题的答复信息(管理员负责答复问题)。
此处涉及两个页面:学生问题反馈页面questionAsk.html,管理员问题答复页面questionReply.html。
2. 添加菜单
首先在WebContent目录下添加两个页面questionAsk.html和questionReply.html。
然后在Menu表添加两个菜单:
INSERT INTO `scholar-system`.`menu`(`id`, `name`, `path`) VALUES (5, '问题反馈', 'questionAsk.html');
INSERT INTO `scholar-system`.`menu`(`id`, `name`, `path`) VALUES (6, '问题答复', 'questionReply.html');
1
2
最后还需要通过管理员的权限管理页面,为管理员角色添加问题答复权限,为学生角色添加问题反馈权限。
3. 学生问题反馈开发
首先学生需要能分页查看自己反馈的问题,此处就是一个普通的分页查询,需要注意的一点是在查询时需要携带当前登录用户的信息,因为学生只能查看自己反馈的问题。然后学生可以提交问题,在问题反馈表中新增一条记录即可。
修改questionAsk.html代码:
<!DOCTYPE html> <html> <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> <body> <div class="tool-box"> <a id="btn" onclick="btnAddClick()" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add'">反馈问题</a> </div> <table id="mainTable" title="已反馈问题列表" class="easyui-datagrid" url="CoreServlet?method=getQuestionPage" pagination="true" singleSelect="true" fitColumns="true"> <thead> <tr> <th data-options="field:'id',width:50">序号</th> <th data-options="field:'userName',width:50">反馈人</th> <th data-options="field:'departName',width:50">所属班级</th> <th data-options="field:'content',width:100">问题内容</th> <th data-options="field:'reply',width:100">问题答复</th> </tr> </thead> </table> <!-- 新增弹窗 --> <div id="dialog-add" class="easyui-dialog" title="问题反馈" data-options="iconCls:'icon-ok',closed:'true'" style="width: 600px; height: 400px; padding: 10px"> <table> <tr> <td>反馈内容:</td> <td><input id="add-content" class="easyui-textbox" style="width: 200px"></td> </tr> <tr> <td></td> <td><a id="btn" onclick="btnAddSubmit()" href="#" class="easyui-linkbutton">保存</a></td> </tr> </table> </div> </body> <script> // 新增点击 function btnAddClick() { $('#dialog-add').dialog('open'); } // 新增保存 function btnAddSubmit() { var param = { content: $("#add-content").val() } $.ajax({ url: "CoreServlet?method=questionSubmit", type: "post", dataType: "json", data: param, success: function(res) { console.log(res); if (res.code == 0) { //成功则刷新表格 $('#mainTable').datagrid('reload'); $('#dialog-add').dialog('close'); } else { //提示错误信息 alert(res.msg); } }, }); } </script> </html> 修改CoreServlet: // 获取问题列表 else if (method.equals("getQuestionPage")) { if (loginUser.getRole().equals("schoolmaster")) {// 管理员查看全部问题 QuestionDao questionDao = new QuestionDao(); total = questionDao.getCount(); result.setTotal(total); result.setRows(questionDao.getPage(page, rows)); } else if (loginUser.getRole().equals("student")) {// 学生查看自己提交的问题 QuestionDao questionDao = new QuestionDao(); total = questionDao.getCount(loginUser.getId()); result.setTotal(total); result.setRows(questionDao.getPage(page, rows, loginUser.getId())); } } // 提交问题 else if (method.equals("questionSubmit")) { // 获取机构信息 DepartDao departDao = new DepartDao(); Depart depart = departDao.getById(loginUser.getDepartId()); // 组装问题信息 Question question = new Question(); question.setUserId(loginUser.getId()); question.setUserName(loginUser.getUserName()); question.setDepartId(depart.getId()); question.setDepartName(depart.getName()); question.setContent(request.getParameter("content")); // 插入数据库 QuestionDao questionDao = new QuestionDao(); questionDao.insert(question); result.setCode(0); result.setMsg("操作成功"); } 修改QuestionDao: /** * 获取数量 */ public int getCount() throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "select count(id) from question "; QueryRunner runner = new QueryRunner(); Number number = (Number) runner.query(conn, sql, new ScalarHandler()); int value = number.intValue(); ConnectionUtils.releaseConnection(conn); return value; } /** * 分页查询 */ public List<Question> getPage(int page, int rows) throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "select * from question limit ?,?"; QueryRunner runner = new QueryRunner(); Object[] params = { (page - 1) * rows }; List<Question> questions = runner.query(conn, sql, new BeanListHandler<Question>(Question.class), params); ConnectionUtils.releaseConnection(conn); return questions; } /** * 获取数量(通过userId) */ public int getCount(String userId) throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "select count(id) from question where userId=?"; QueryRunner runner = new QueryRunner(); Object[] params = { userId }; Number number = (Number) runner.query(conn, sql, new ScalarHandler(), params); int value = number.intValue(); ConnectionUtils.releaseConnection(conn); return value; } /** * 分页查询(通过userId) */ public List<Question> getPage(int page, int rows, String userId) throws Exception { Connection conn = ConnectionUtils.getConnection(); String sql = "select * from question where userId=? limit ?,?"; QueryRunner runner = new QueryRunner(); Object[] params = { userId,(page - 1) * rows, rows }; List<Question> questions = runner.query(conn, sql, new BeanListHandler<Question>(Question.class), params); ConnectionUtils.releaseConnection(conn); return questions; }
4. 管理员问题答复功能开发
其实管理员功能答复,首先是显示所有问题的分页列表,然后就是可以编辑其中一个问题的reply属性。
没有什么新的功能,感兴趣的可以直接去看源码。
5. 总结
问题反馈和问题答复其实就是一个变通版本的分页查询、新增、修改功能。需要根据登录人员的角色查询/处理不同的数据库数据而已。