2011-10-11 63 views
0
<% 
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中,我正在迭代該列表並使用選項逐個檢索問題,問題出現在十個問題中,我只能選擇一個答案。當我試圖選擇另一個答案時,我正在失去先前選定的答案。如何在此Jsp代碼中選擇多個選項?

回答

0

您需要添加一個額外的字段保存在TestQuestionuserSelection這個字段必須更新(在適當的值 - 1,2,3,4取決於答案序列),當用戶提交他/她的選擇。在呈現問題和答案的同時,爲所選的radio html輸入標記嵌入checked='checked'屬性。

PS:Do not use scriptlets。始終使用EL/JSTL

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"); 
// ... 

無關到具體問題,用小腳本(那些<% %>的東西)是一個90年代的方式編寫JSP,並且自十年以來一直是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> 

我也建議使用,而不是神祕的東西,如qstdDetAns_a更多的自我記錄的變量名。長期來說,你會爲自己和你的繼任者提供很多好處。我還建議瞭解如何將樣式分離爲獨立的CSS文件,以儘量減少HTML樣板。