2016-01-13 149 views
-2

我想知道是否有人可以提供幫助,我想循環訪問ArrayList,但每次只能使用一個按鈕幫助一個項目,所以當我按下該按鈕時,它會顯示給我列表中的下一個項目等等。或者如果還有其他方法,我會很樂意接受任何建議。我試圖設計一個測試,以便學生在提交答案時能夠得到一個問題,並轉到下一個問題。這就是我在展示JSP時的完整列表。 我的servlet如何從Java ArrayList一次顯示一個項目ArrayList

 String vassId = request.getParameter("vassId"); 
     List<Assessment> qList = new ArrayList<Assessment>(); 
     Assessment qObj = null; 
     DbConnection dbConn = null; 
     Connection conn = null; 
     CallableStatement proc = null; 
     response.setContentType("text/html"); 
     ResultSet rs = null; 

     try { 
      dbConn = new DbConnection(); 
      conn = DbConnection.connection(); 

      String dbCall = "{ ? = call pa_customer_admin.fn_list_question(?) }"; 
      proc = DbConnection.connection().prepareCall(dbCall); 
      proc.registerOutParameter(1, OracleTypes.CURSOR); 
      proc.setInt(2, Integer.parseInt(vassId)); 
      proc.execute(); 
      rs = (ResultSet) proc.getObject(1); 
      while (rs.next()) { 
       qObj = new Assessment(); 
       qObj.setVassId(Integer.parseInt(rs.getString(1))); 
       qObj.setDescr(rs.getString(2)); 
       qObj.setQuesStatus(rs.getString(3)); 
       qObj.setQuesTypeCode(rs.getString(4)); 
       qObj.setCreatedDate(rs.getString(6)); 
       qObj.setQuestion(rs.getString(7)); 
       qObj.setMark(rs.getString(8)); 
       qObj.setTimeLimit(rs.getInt(9)); 
       qList.add(qObj); 
      } 
      request.setAttribute("qObj", qObj); 
      request.setAttribute("qList", qList); 
      proc.close(); 

JSP

    <form action="AnswerSaveProcess" method="POST" > 
        <c:if test="${empty qList}"> 
         Empty list 
        </c:if> 
        <c:if test="${! empty qList}"> 
         <c:forEach items="${qList}" var="q"> 
          <label>Question</label> 
          <input type="hidden" value="<%= vassId%>"> 
          <textArea readonly="readonly">${q.question}</textarea> 
          <input type="text" value="${q.mark}" readonly="readonly">        
          <input type="hidden" id="userTime" value="${q.timeLimit}" /> 

          <label>Answer 1</label> 
          <input type="text" ><input name="ansStatusCode" type="radio"><br/> 
          <label>Answer 2</label> 
          <input type="text" ><input name="ansStatusCode" type="radio"><br/> 
          <input type="submit" name="submit" value="Save Answer"> 
         </c:forEach> 
        </c:if> 
       </form> 
+0

這聽起來對我來說並不是真正的ArrayList數據結構問題,而是一個關於JSP頁面或Web會話中狀態管理的問題(問題的文本沒有提到JSP,但它被標記爲這樣) –

+0

是的西蒙我正在使用Servlet並從數據庫創建一個ArrayList並在JSP上顯示它。 – Tony

+0

存儲當前索引,並在數組列表中顯示索引內容,下一次做索引++; –

回答

0

的ArrayList實現了Iterable接口,並擁有其成員基於索引的訪問。您只需要閱讀使用示例中的一些Java文檔。

+0

感謝您的回覆,我需要一次顯示一個項目的任何想法? – Tony

+0

https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#get-int- https://docs.oracle.com/javase/8/docs/api /java/util/ArrayList.html#iterator-- https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html#next-- 就像我說的,它是全部在Java文檔中。 –

+0

@DmytroZnaiko你可能想添加那些評論而不是答案? – Phani

0

嘗試像(未經測試):

final List<String> questions = Arrays.asList(new String[]{"question1", "question2", "question3"}); 
JButton b = new JButton("Press Me"); 
final JLabel label = new JLabel(); 
final cnt = 0; 
b.addActionListener(new ActionListener(){ 
    pubic void actionPerformed(ActionEvent e) { 
     label.setText(question.get(cnt++)); 
     if(cnt > questions.size()) cnt = 0; 
    } 
}); 
JFrame frame = new JFrame(); 
frame.getConentPane().add(b); 
frame.getConentPane().add(label); 
frame.setSize(800,600); 
frame.setVisible(true); 
+0

不錯的答案,但問題被標記爲'jsp'。 – Andreas

+0

哦,我的錯......我仍然留下答案,因爲邏輯保持不變 –

0

由於這是一個ArrayList,您可以使用索引。按下按鈕時遞增索引並從ArrayList中獲取下一項。一個ArrayList

package items; 

import java.util.List; 

public class GetNextItem { 

    private static int itemIndex; 

    private List<String> itemList; 

    // Constructor with itemList 
    public GetNextItem(List<String> itemList) { 
     this.itemList = itemList; 
     itemIndex = 0; // start at the first item. 
    } 

    /** 
    * Get the current Item from the itemList 
    * @return the current item from the itemList or NULL if all the items are processed. 
    */ 
    public String getItem() { 
     if (itemIndex >= itemList.size()) { 
      return null; // end of list 
     } 
     return itemList.get(itemIndex); 
    } 

    /** 
    * Get the next Item from the itemList 
    * @return the next item from the itemList or NULL if all the items are processed. 
    */ 
    public String getNextItem() { 
     itemIndex ++; 
     return getItem(); 
    } 
} 
0

元素可以容易地通過索引來訪問。

從網頁(由JSP構建)中,您可以使用查詢參數請求特定問題,例如, showquestion.jsp?question=4

只要還有更多的問題,JSP生成的頁面就可以包含一個按鈕來顯示下一個問題,方法是生成一個新的鏈接(<a href="showquestion.jsp?question=5">Next</a>),下一個更高的索引。

相關問題