自己做了一个基于JSP/Servlet的题库管理系统,学生在练习的时候,我是一页显示一道题的,然后通过一个pageNow(对应第几题)来显示需要的题,现在问题来了:
当点击上一题的时候,如何保存上一题学生的答案(考虑每答一道题,就放进数据库中,可行吗?),当学生点击上一题的时候,上一题的答案就需要显示出来了,而不是第一次作答时的空的了,如果每点击下一题的时候,就把当前作答的答案放进数据库的话,当点击上一题的时候,就需要从数据库中拿出答案,进行显示了.
当点击上一题的时候,如何保存上一题学生的答案(考虑每答一道题,就放进数据库中,可行吗?),当学生点击上一题的时候,上一题的答案就需要显示出来了,而不是第一次作答时的空的了,如果每点击下一题的时候,就把当前作答的答案放进数据库的话,当点击上一题的时候,就需要从数据库中拿出答案,进行显示了.
添加一点:
在session失效前或是重新登陆后找到上次登陆的session里的答案存于数据库。
我开始也是考虑放在List中,然后放入session中,最后再放入数据库中的,但是因为我每页只显示一道题,每次点击上一题或者下一题都是一个链接跳回当然页面,通过pageNow的加一或者减一来控制的,这样就会涉及到首次访问跟后面的访问的区别问题,主要在变量的定义的问题上,主要代码如下:<%
int pageNow = Integer.parseInt(request.getParameter("pageNow")); //当前显示的页数,也就是第几题,第一次的时候pageNow=0,显示第一题
ArrayList<SingleChooseBean> selQues = new ArrayList<SingleChooseBean>(); //数据库中拿到的单选题
ArrayList<SingleChooseBean> selAnswers = new ArrayList<SingleChooseBean>(); //学生的单选题的答案
selQues = (ArrayList<SingleChooseBean>)session.getAttribute("selQues");//拿到单选题
int pageCount = selQues.size(); //一共有多少道题
String answer = "";if(pageNow != 0) { //非首次访问
answer = request.getParameter("selQues"+(pageNow-1));//"selQues"+(pageNow-1)是上一题个单选题的单选框的编号
selAnswers.add(pageNow-1,answer);
session.session.setAttribute("selAnswers",selAnswers);
}
%>
//中间是根据pageNow显示试题的代码//显示上一题下一题的链接
<tr align="right"><td>
<%
if(pageNow != 0) {
%>
<a href="exercise.jsp?pageNow=<%=pageNow-1 %>" >上一题</a>
<%
}
if(pageNow != pageCount && pageNow != (pageCount -1)) {
%>
<a href="exercise.jsp?pageNow=<%=pageNow+1 %>" >下一题</a>
<%
}
%>
</td></tr>
<%
if(pageNow == (pageCount-1)) {
%>
<tr align="center">
<td align="center"><input type="submit" name="exerciseResult" value="提交查看参考答案" /></td>
</tr>
<%
}
%>
感觉这样会出问题,每次都定义变量的话可以吗?如果放在第一次进入的时候定义,势必会造成变量不可用的状态.
应该是放在一个session.把这个session的有效时间设置的和考试时间一样长.页面上放一个"交卷"按钮,点击按钮,数据进库.学生只要不点"交卷"就不算完成考试.