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. 總結
問題回報和問題答複其實就是一個變通版本的分頁查詢、新增、修改功能。需要根據登入人員的角色查詢/處理不同的資料庫資料而已。