2012-05-01 53 views
2

我在Java中使用JSP應用程序使用以下類。將對象綁定到JSP頁面上的控件

// 公共類QuestionBO實現Serializable {

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

吸氣&設定器....

JSP頁面具有這樣的形式,其中每個問題(其字符串表示)具有一旁邊的複選框它。用戶標記一些問題並將表單提交給服務器以供servlet處理。

問題對象與複選框綁定的常規方式是什麼,以便我可以找出問題已被選中?

目前我使用下面的方法構造形式:

//

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

我怎麼可以在此頁面上的servlet獲取地圖?

+0

我在servlet的 – 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> 

這樣,你就可以通過只在servlet下面的調用抓住所有檢查的值:

String[] chosenQuestions = request.getParameterValues("chosen_question"); 
+0

@Andrey:我認爲,如果你把名字中的值放在名字裏,那麼在servlet端收集選定的值是相當笨拙的。您需要在參數名稱/映射上引入一個循環,並執行一些空/空的檢查,如果您只是以正常方式將該值設置爲輸入值,則此檢查畢竟不必要。 – BalusC

+0

@BalusC我同意你的意見。謝謝你的解釋。 – kapand

0

生成每個checkbox一個唯一的名稱如下:

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

或:

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

之後,你已經能夠識別每個在你的servlet checkbox

+0

guiestionId是來自db的標識。我無法在jsp – Ray

+0

@ user712183上顯示或使用此值爲什麼?因此,創建一個ID到一個頁面級別的ID的地圖,並保持提交。您必須有一種唯一標識問題的方法 - 無論是通過索引還是ID,不管它是否是DB ID。 –

+0

在你的課程QuestionBO中,可以對字段「問題」進行相同的描述。如果你不使用它,爲什麼你在課堂上有一個fieldId'questionId'?在查詢字段'問題'到數據庫,並獲得'questionId'的值 – kapand

相關問題