JSP+Servlet培训班作业管理系统[16]–校长角色之课程浏览功能实现

1. 本章任务

校长角色除了要完成人员管理之外,我们还希望校长可以查看所有课程信息。

注意课程是由教师发布的,校长只能查看,但是不能新增、修改、删除。

其实该功能与人员浏览几乎一模一样,我们以记流水账的形式再描述下,加深大家的开发印象。

2. 为校长添加菜单

public class Constants {
	// 用于保存角色及对应的菜单信息
	public static HashMap<String, String[][]> roleMenuMap = new HashMap<String, String[][]>();
	// 使用static代码块对roleMenuMap进行初始化
	static {
		// 校长拥有的菜单
		roleMenuMap.put("master", new String[][] { { "人员管理", "userManage.jsp" }, { "课程查看", "courseView.jsp" } });
	}
}

3. 跳转课程浏览页时携带课程数据

修改RouteServlet.java

    else if (childPage.equals("courseView.jsp")) {
			CourseDao courseDao=new CourseDao();
			request.setAttribute("courses", courseDao.getCourses());
		}

4. 添加course.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!-- 使用c:标签需要添加本行代码 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>courseView.jsp</title>
<link href="css/content.css" type="text/css" rel="stylesheet" />
</head>
<body>
	<div id="content_top">课程浏览</div>
	<div id="content_mid">
		<table class="table_theme1">
			<thead>
				<tr>
					<th>课程编号</th>
					<th>课程名称</th>
					<th>授课教师</th>
				</tr>
			</thead>
			<c:forEach items="${course}" var="item">
				<tr>
					<td>${item.courseId}</td>
					<td>${item.courseName}</td>
					<td>${item.courseUser}</td>
				</tr>
			</c:forEach>
		</table>
	</div>
</body>
</html>

5. 存在的问题

此处存在一个问题,就是courseUser存储的是用户的id,而我们界面上显示的时候,无疑是更想要得到用户的名字。

此处可以给Course类添加一个courseUserName冗余字段,注意该字段不参与insert/update等更新操作,只是查询时冗余出用户姓名而已。

6. 联表查询用户姓名

6.1 修改Course类

/**
 * 课程类
 */
public class Course {
	private int courseId;
	private int courseUser;
	private String courseName;

	/**
	 * 冗余字段,仅用于查询
	 */
	private String courseUserName;

	// 省略get set方法
}

6.2 修改CourseDao

修改CourseDao的getCourses方法和makeOneCourse方法,联表查询出用户姓名。

	/**
	 * 获取全部
	 */
	public List<Course> getCourses() {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Course> courses = new ArrayList<Course>();
		try {
			conn = DbUtils.getConnection();
			String sql = "select c.*,u.user_name from course c left join user u on c.course_user=u.user_id";
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			while (rs.next()) {
				courses.add(makeOneCourse(rs));
			}
		} catch (SQLException e) {
		} finally {
			DbUtils.releaseConnection(rs, ps, conn);
		}
		return courses;
	}

	/**
	 * 获取一个
	 */
	public Course makeOneCourse(ResultSet rs) throws SQLException {
		Course course = new Course();
		course.setCourseId(rs.getInt("course_id"));
		course.setCourseName(rs.getString("course_name"));
		course.setCourseUser(rs.getInt("course_user"));
		course.setCourseUserName(rs.getString("user_name"));
		return course;
	}

6.3 修改courseView.jsp

用户名部分显示姓名:

    <table class="table_theme1">
			<thead>
				<tr>
					<th>课程编号</th>
					<th>课程名称</th>
					<th>授课教师</th>
				</tr>
			</thead>
			<c:forEach items="${courses}" var="item">
				<tr>
					<td>${item.courseId}</td>
					<td>${item.courseName}</td>
					<td>${item.courseUserName}</td>
				</tr>
			</c:forEach>
		</table>

7. 总结

处理联表查询的方式有很多,本章采取了一种比较简单方法,可能不够正规,或者性能不够好。

但是管他的呢,我们这个入门课程,采用这样的技术就够了。

看下效果如下,大功告成也!!
在这里插入图片描述


如有问题请扫码联系我
在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页