2016-01-13 66 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>),下一个更高的索引。

相关问题