Привязка объектов к элементам управления на страницах JSP

У меня есть следующий класс, который я использую в своем приложении Java с JSP.

// public class QuestionBO implements Serializable{

<code>private int questionId;
private int testID;
private String question;

private TutorBO infoAboutTutor;
private SubjectBO infoAboutSubject;
private TestBO infoAboutTest;
private List<AnswerBO> answers;

public QuestionBO() {
}

public QuestionBO(String question) {
    this.question = question;
}
</code>

геттер и усилитель сеттер....

Страница JSP имеет форму, где каждый вопрос (его строковое представление) имеет флажок рядом с ним. Пользователь отмечает некоторые вопросы и отправляет форму на сервер для обработки сервлетом.

Как обычно связывают объекты Вопрос с флажками, чтобы я мог узнать, какие Вопросы были выбраны?

В настоящее время я использую следующий подход для построения формы:

//

<code>    <c:if test="${not empty questionsForSubject}">
    <form  action="/TutorWebApp/controller" method="POST" name="addQuestionForm">
        <input type="hidden" name="command" value="add_question_list" />
        <input type="hidden" name="testName" value="${testName}"/>            
        <table border ="1">
            <tbody>
                <c:forEach items="${questionsForSubject}" var="question">
                    <tr>
                        <td>
                            <input type="checkbox" name ="choosen_question" 
                                   value="${question.getQuestion()}">
                            ${question.getQuestion()}
                            <br />
                        </td>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
        <input type="submit" value="Add questions "/>              
    </form> 
</code>

И я не должен использовать фреймворки.

Спасибо

И у меня последний вопрос

<code>    <c:if test="${not empty questionsForSubject}">
    <form  action="/TutorWebApp/controller" method="POST" name="addQuestionForm">
        <input type="hidden" name="command" value="add_question_list" />
        <input type="hidden" name="testName" value="${testName}"/> 
        <input type="hidden" name="questionsForSubject" value="${questionsForSubject}"/>
        <table border ="1">
            <tbody>
                <c:forEach items="${questionsForSubject.keySet()}" var="questionID">
                    <tr>
                        <td>
                            <input type="checkbox" name ="choosen_question" value="${questionID}">
                            ${questionsForSubject.get(questionID).getQuestion()}
                            <br />
                        </td>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
        <input type="submit" value="Добавить вопросы"/>              
    </form> 
</code>

Как я могу получить карту с этой страницы на сервлете?

 Ray01 мая 2012 г., 13:17
Set <QuestionBO> questionsForSubject =code AddTestLogic.getListOfQuestionsBySubject (subjectIdByName); request.setAttribute ("questionsForSubject", questionsForSubject);
 Ray01 мая 2012 г., 13:17
У меня есть предыдущая страница, где я выбираю тему из выпадающего списка, для этого я показываю список вопросов на следующей странице
 Ray01 мая 2012 г., 13:14
У меня есть этот код в сервлете

Ответы на вопрос(2)

Создайте уникальное имя для каждогоcheckbox следующее

<input type="checkbox" name="${question.questionId}" />

или

<input type="checkbox" name="choosen_question_${question.questionId}" />

После этого вы уже можете идентифицировать каждыйcheckbox в вашем Сервлет

 Ray01 мая 2012 г., 13:25
guiestionId - это идентификатор из БД. Я не могу показать или использовать это значение на JSP
 Ray01 мая 2012 г., 13:53
@ Дэйв Ньютон Можете ли вы объяснить, пожалуйста, как я могу автоматически сгенерировать идентификатор в jsp и как я могу получить карту с помощью Map <AutogenKey, QuestionBO>. И я могу получить на контроллере запрос помощи только String или String []
 kapand01 мая 2012 г., 13:37
То же самое можно сказать о полеquestion в вашем классе. Почему у вас есть полеquestionId в классе, если вы не используете его? По запросу поляquestion в базу данных, а также получить значениеquestionId
 kapand01 мая 2012 г., 14:06
Доступ к БД из JSP - плохая практика. Покажи как ты получаешьquestion в классе QuestionBO. ПолеquestionId должен быть получен таким же образом.
 Dave Newton01 мая 2012 г., 13:36
@ user712183 Почему бы и нет? Поэтому создайте карту идентификаторов для идентификатора уровня страницы и сохраняйте ее среди отправляемых. У вас должен быть способ уникальной идентификации вопроса - либо по индексу, либо по идентификатору, независимо от того, является ли он идентификатором БД.
Решение Вопроса

уникальный идентификатор вопроса:

<c:forEach items="${questionsForSubject}" var="question">
    <tr>
        <td>
            <input type="checkbox" name="chosen_question" value="${question.questionId}" />
            ${question.question}
            <br />
        </td>
    </tr>
</c:forEach>

Таким образом, вы сможете получить все проверенные значения с помощью следующего вызова в сервлете:

String[] chosenQuestions = request.getParameterValues("chosen_question");
 kapand01 мая 2012 г., 16:12
@ BalusC Я согласен с тобой. Спасибо за ваше объяснение
 BalusC01 мая 2012 г., 16:06
@ Андрей: Я думаю, потому что довольно неуклюже собирать выбранные значения на стороне сервлета, если вместо этого поставить значение в имени. Вам нужно будет ввести цикл над именами / картой параметров и выполнить некоторые проверки на пустые / пустые значения, которые, в конце концов, не нужны, если вы просто устанавливаете значение в качестве входного значения обычным способом.

Ваш ответ на вопрос