2015-12-30 100 views
1

我有一個50個問題的列表,並要求用戶回答他選擇的任何25個問題。我正在使用JSP和Servlet來達到這個目的。邏輯錯誤 - JSP和Servlet

這裏是我的代碼:

<form action="Servlet1" method="post"> 

<%List questions = new ArrayList(); // This list has 50 questions 

for(int i=1; i<questions.size(); i++) 
{ %> 
    Question Number: <% out.println(i); %><br><br> 

    <%=questions.get(i)%><br><br> 

    Answer: 
    <input type="hidden" name="question" value="<%=questions.get(i) %>"> 
    <input type="text" name="answer"> <br><br> 
    <input type="submit" value="submit" name="submit"> 
<% } %> 

但在Servlet的,當我使用request.getParameter("answer");它給了我回答僅顯示最近的問題,當用戶回答其他一些question..it被保存爲空白(不是「空」它被保存爲「」 - 空的空間)此外問題也沒有得到相應的保存。但是,當用戶接聽最近的問題,這兩個問題,答案會保存..

我認爲它是因爲一些邏輯error..can誰能幫助我一個解決方案...

我要保存在數據庫中的問題和答案,無論用戶回答哪個問題。

+0

您將需要唯一命名的所有'answer'文本元素。如果所有50個Q都在同一頁面上,還要保留單個「提交」按鈕頁面。還有一個更正就是關閉'input'元素。 – pratikpawar

+0

@Aamir:請停止格式化非建議編輯中的代碼。框架/產品/庫名稱不是代碼。只有代碼是代碼。 – BalusC

回答

3

在html中,每個元素都是通過名稱或id來標識的。但它必須是獨一無二的。 此代碼在問題上做循環,每次都定義相同的名稱,即文本輸入的answer。 所以它不會創建另一個,但覆蓋以前的一個文本。 因此,你可以選擇使用其他i另一種方法,使其具有唯一喜歡

<input type="text" name="answer<%=i>"> <br><br> 

你可以在服務器端得到這樣

for(int i=1; i<questions.size(); i++) 
{ 
    String answer= request.getParameter("answer"+i) 
    //add logic here 
} 

我希望這將幫助!

+0

這是工作,但另一個問題araised ..當用戶輸入第四個問題的答案..數據庫存儲前3個記錄的空白..我不想要那些空白空間記錄..它可能..? – JavaLearner1

+0

@ JavaLearner1:我想,要回答這個問題,你需要顯示你的db存儲邏輯和'Servlet1'代碼。 –

+0

@ JavaLearner1可能頁面正在刷新!前3個記錄答案,而你在頁面上的第四個問題的答案?如果不是,那麼你要麼檢查服務器端的空條件,如果答案爲空,則不允許添加,但這取決於您的要求。 – iMBMT

2

這是因爲您不能使用多個輸入類型具有相同的名稱。試試你輸入名字像下面shwon後追加一些別名:

<input type="text" name="answer_<%=i>"> <br><br> 
0

認沽提交按鈕出來的圈上它都將提交值發送到您的servelt