业务需求:
进入到学生具体评教页面后,根据传递过来的课程类型,加载对应的考核模板,然后查询该考核模板下面的所有考核项目,同时绑定的还有每条考核项目下的对应的选项(每条考核项目的内容可以是不同的);当学生评完之后,如果有没有评价的考核项目,跳转到未选考核的项目那里,进行提示。
实现:
首先实体关系映射的时候,一个考核模板对应多条考核项目,一条考核项目可以对应多个考核选项。映射关系如下考核项目和考核选项设置成了双向一对多的关系:
考核项目实体:
public class AssessContent extends BaseEntity {
@OneToMany(mappedBy="assessContent",cascade=CascadeType.ALL,targetEntity=Weight.class,fetch = FetchType.EAGER)
@JsonIgnore
private Set<Weight> weights = new HashSet<Weight>();
}
Controller:
@RequestMapping(value = "/queryAssessContentList")
public String queryAssessContentList(HttpServletRequest request,
HttpServletResponse response) throws UnsupportedEncodingException {
Map<Serializable, Serializable> map = new HashMap<Serializable, Serializable>();
// 获取前台传递的参数
String studentName = new String((request.getParameter("studentName")).getBytes("iso-8859-1"),"utf-8");
String courseName = new String((request.getParameter("courseName")).getBytes("iso-8859-1"),"utf-8");
String teacherName = new String((request.getParameter("teacherName")).getBytes("iso-8859-1"),"utf-8");
String teacherId = new String((request.getParameter("teacherId")).getBytes("iso-8859-1"),"utf-8");
String studentId = new String((request.getParameter("studentId")).getBytes("iso-8859-1"),"utf-8");
String courseId = new String((request.getParameter("courseId")).getBytes("iso-8859-1"),"utf-8");
String courseTypeId = new String((request.getParameter("courseTypeId")).getBytes("iso-8859-1"),"utf-8");
String Id=new String((request.getParameter("Id")).getBytes("iso-8859-1"),"utf-8");
// 根据课程Id查询该课程ID对应的模板ID
List<Template> templates=templateBean.queryTemplateByClassTypeId(courseTypeId);
// 获取模板Id
String templateId=templates.get(0).getId();
map.put("templateId", templateId);
// 根据模板Id查询对应的考核项目
List<AssessContent> assessContentlist = assessContentBean.queryContentByTemplateId(templateId);
// 获取待评选项的数量
int assessCount = assessContentlist.size();
// 将查询的信息放入到request中。
request.setAttribute("Id", Id);
request.setAttribute("templateId", templateId);
request.setAttribute("teacherId", teacherId);
request.setAttribute("studentId", studentId);
request.setAttribute("courseId", courseId);
request.setAttribute("courseTypeId", courseTypeId);
request.setAttribute("assessCount", assessCount);
request.setAttribute("studentName", studentName);
request.setAttribute("courseName", courseName);
request.setAttribute("teacherName", teacherName);
request.setAttribute("assessContentlist", assessContentlist);
return "/studentAssessDetial";
}
JSP页面:主要是通过JSTL表达式和EL表达式进行循环绑定
<body>
<form id="StudentAssessInfo" action="studentAssessResult">
<a id="tiaozhuan" href="#" style="display: none;">要跳转到div啊</a>
<!--获取是否评教Id -->
<input id="ifPj" type="hidden" value="${Id}">
<!--获取待选数量 -->
<input id="hidAssessProjectCount" type="hidden" value="${assessCount}">
<!--学生学号 -->
<input id="studentId" name="studentId" type="hidden"
value="${studentId}">
<!-- 教师教工号 -->
<input id="teacherId" name="teacherId" type="hidden"
value="${teacherId}">
<!-- 课程号 -->
<input id="courseId" name="courseId" type="hidden" value="${courseId}">
<!-- 课程类型Id -->
<input id="courseTypeId" name="courseTypeId" type="hidden"
value="${courseTypeId}">
<!--模板Id -->
<input id="templateId" name="templateId" type="hidden"
value="${templateId}">
<input id="templateId" name="templateId" type="hidden"
value="${a}">
<div class="" style="border: 1px solid;">
<div id="welcome"
style="margin-left: 100px; margin-top: 30px; margin-right: 100px; margin-bottom: 30px;">
<span class="title">【${studentName}】</span>您好,欢迎使用此评教系统,请对<span
class="title">【${teacherName}】</span>老师的<span class="title">【${courseName}】</span>进行评分!
</div>
<div id="assessContent"
style="border: 1px solid; margin-left: 100px; margin-top: 30px; margin-right: 100px; margin-bottom: 30px; padding-bottom: 20px; padding-top: 20px; padding-left: 20px; padding-right: 20px;">
<div id="content">
<table id="assessDetial" cellpadding="10px">
<tbody>
<c:if test="${!empty assessContentlist}"></c:if>
<!--绑定考核项目和每个考核项目的选项 -->
<c:forEach items="${assessContentlist}" var="a"
varStatus="status">
<tr>
<td><div id="${status.index+1}" name="assessSelectedDiv">
<c:out value="${status.index+1}" />
、${a.assessContent}<br>
<c:forEach items="${a.weights}" var="b">
<input type="radio" name="${a.id}" value="${b.id}" id="lable${b.id}"
class="answer"><label for="lable${b.id}">${b.weightContent} </label>
<br />
</c:forEach>
</div></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<div id="suggestion">
<textarea id="txtCmt" rows="6" cols="100"
style="width: 400px; font-size: 14px;">请输入你对该老师的评价</textarea>
<br> <input id="comnit" type="button" value="提交"
οnclick="javascript:checkResult()">
</div>
</div>
<div id="footer" style="text-align: center;">
<div class="footer">
<a href="#">By@廊坊师范学院提高班</a>
</div>
</div>
</div>
</form>
</body>
界面效果: