2012-05-01 3 views
2

Java 응용 프로그램과 함께 Java에서 사용하는 다음 클래스가 있습니다.JSP 페이지의 컨트롤에 객체 바인딩

// 공용 클래스 QuestionBO는

JSP 페이지는 각 질문 (의 문자열 표현) 옆에 체크 박스가있는 형태를 가지고 .... 직렬화 {

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; 
} 

게터 & 세터를 구현 그것. 사용자는 질문 중 일부를 표시하고 양식을 서블릿으로 처리하기 위해 서버에 제출합니다.

질문을 선택했는지 확인할 수 있도록 Question 객체를 체크 상자로 바인딩하는 일반적인 방법은 무엇입니까? //

<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> 

을 그리고 프레임 워크를 사용하지 않아야합니다 :

현재 나는 형태를 구성하기위한 다음과 같은 방법을 사용하고 있습니다.

감사

그리고 내가 가진 마지막 질문 나는 서블릿에이 페이지에서지도를 얻을 수있는 방법

<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> 

?

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

나 : 다음과 같이

+0

내가 서블릿 – Ray

+0

나는이 코드를 가지고 콤보 박스에서 주제를 선택하는 이전 페이지를 다음 페이지에 표시합니다. – Ray

+0

세트 questionsForSubject = 'code' AddTestLogic.getListOfQuestionsBySubject (subjectIdByName); request.setAttribute ("questionsForSubject", questionsForSubject); – Ray

답변

1

각 확인란에 고유 한 값을 지정하십시오. 예를 들어, 고유 질문 식별자 :

<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"); 
+0

@Andrey : 이름에 값을 넣으면 서블릿 측에서 선택된 값을 수집하는 것이 다소 번거롭기 때문에 생각합니다. 매개 변수 이름/map에 루프를 도입하고 null/empty 검사를 수행해야합니다.이 값은 입력 값으로 정상적인 방법으로 값을 설정하면 필요하지 않습니다. – BalusC

+0

@BalusC 나는 당신과 동의합니다. 당신의 설명에 감사드립니다. – kapand

0

checkbox에 대한 고유 한 이름을 생성 그 후

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

을, 당신은 이미 각 checkbox 당신의 서블릿에서 식별 할 수있어

+0

guiestionId는 db의 ID입니다. jsp – Ray

+0

@ user712183에이 값을 표시하거나 사용할 수 없습니까? 따라서 페이지 수준 ID에 대한 ID 맵을 만들고 제출간에 보관하십시오. ID 또는 ID 여부에 관계없이 질문을 고유하게 식별 할 수있는 방법이 필요합니다. –

+0

QuestionBO 클래스의'question' 필드에 대해서도 마찬가지입니다. 왜 사용하지 않으면 클래스에'questionId' 필드가 있습니까?데이터베이스에'question'을 쿼리하고'questionId'의 값을 얻습니다. – kapand