У меня есть список из 50 вопросов, и я прошу пользователя ответить на любые 25 вопросов по своему выбору. Для этого я использую JSP и сервлет.

Вот мой код:

<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");, он дает мне ответ только на последний отображаемый вопрос. Когда пользователь отвечает на какой-то другой вопрос ... он сохраняется как пустой (не "null", он сохраняется как "" - пустое место) Также вопрос тоже не сохраняется соответственно. Но когда пользователь отвечает на последний вопрос, и вопрос, и ответ сохраняются.

Я думаю, это из-за какой-то логической ошибки ... может ли кто-нибудь помочь мне с решением ...

Я хочу сохранить вопрос и ответ в базе данных, на какие бы вопросы ни отвечал пользователь.

1
JavaLearner1 30 Дек 2015 в 08:18

3 ответа

Лучший ответ

В html каждый элемент идентифицируется либо по имени, либо по идентификатору. но он должен быть уникальным. Этот код выполняет цикл по вопросам, и каждый раз он определяет одно и то же имя, которое является 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
}

Я надеюсь, это поможет!!

3
bNd 30 Дек 2015 в 05:26

Это потому, что вы не можете иметь одно и то же имя с несколькими типами ввода. попробуйте добавить псевдоним после вашего имени ввода, как показано ниже:

<input type="text" name="answer_<%=i>"> <br><br>
2
Nir 30 Дек 2015 в 05:26

Поместите кнопку отправки вне цикла, он отправит все значение поля на ваш сервлет

0
Sudhir 30 Дек 2015 в 05:32