<%
List qs=(List)request.getAttribute("listOfquestions");
Iterator questions= qs.iterator();
for(int i=1;i<qs.size();i++){
tqDet=(TestQuestion)qs.get(i);
%>
<tr>
<td colspan="2" align="left"><b class="textboldblack"><%out.println(i);%><%out.println(tqDet.getQuestions());%></td></tr>
<tr><td width="22%"align="left"><b class="textboldblack"><input type="radio" name="s"><%out.println(tqDet.getAns_a());%></td></tr>
<tr><td width="22%"align="left"><b class="textboldblack"><input type="radio" name="s"><%out.println(tqDet.getAns_b());%></td></tr>
<tr><td width="22%"align="left"><b class="textboldblack"><input type="radio" name="s"><%out.println(tqDet.getAns_c());%></td></tr>
<tr><td width="22%"align="left"><b class="textboldblack"><input type="radio" name="s"><%out.println(tqDet.getAns_d());%></td></tr>
<%
}
%>
<tr><td colspan="2" align="center"><input type="button" value="Submit"></td>
在上面的JSP代码中,我在选择单选按钮时遇到问题。例如,我以列表的形式从数据库中获得10个问题。在JSP中,我正在迭代该列表并使用选项逐个检索问题,问题在于十个问题,我只能选择一个答案。当我试图选择另一个答案时,我失去了之前选择的答案。
答案 0 :(得分:1)
HTML单选按钮只允许一次选择。您需要通过HTML复选框替换它们。
<input type="checkbox" name="answer">
但是,您没有在任何地方指定输入值。您需要在value
属性中指定答案(或其ID)。
<input type="checkbox" name="answer" value="<%=tdDet.getAns_a()%>">
最后,您可以按HttpServletRequest#getParameterValues()
检索所有选中的值:
String[] answers = request.getParameterValues("answer");
// ...
无关具体问题,使用 scriptlets (那些<% %>
事物)是编写JSP的90种方式,并且是discouraged,因为十年。您当前的代码可以更清晰地重写为:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jst/core" %>
...
<c:forEach items="${listOfQuestions}" var="question" varStatus="loop">
<tr><td colspan="2" align="left"><b class="textboldblack">${loop.index + 1}${question.questions}</td></tr>
<tr><td width="22%" align="left"><b class="textboldblack"><input type="checkbox" name="s" value="${question.ans_a}">${question.ans_a}</td></tr>
<tr><td width="22%" align="left"><b class="textboldblack"><input type="checkbox" name="s" value="${question.ans_b}">${question.ans_b}</td></tr>
<tr><td width="22%" align="left"><b class="textboldblack"><input type="checkbox" name="s" value="${question.ans_c}">${question.ans_c}</td></tr>
<tr><td width="22%" align="left"><b class="textboldblack"><input type="checkbox" name="s" value="${question.ans_d}">${question.ans_d}</td></tr>
</c:forEach>
<tr><td colspan="2" align="center"><input type="button" value="Submit"></td>
我还建议使用更多自我记录的变量名称,而不是像qs
,tdDet
,Ans_a
那样神秘的变量名称。从长远来看,你自己和你的继任者都会受到很多青睐。我还建议学习如何将样式分成独立的CSS文件以最小化HTML样板。
答案 1 :(得分:0)
你需要添加一个额外的字段来保存userSelection
类中的TestQuestion
,并且该字段必须更新(具有适当的值 - 1,2,3,4取决于答案序列)用户提交他/她的选择。在呈现问题和答案时,为选定的checked='checked'
html输入标记嵌入radio
属性。
PS:Do not use scriptlets
。始终使用EL/JSTL
。