如何从Java ArrayList一次显示一个项目

时间:2016-01-13 15:35:40

标签: java jsp arraylist

我想知道是否有人可以提供帮助,我想借助一些按钮迭代ArrayList,但是当我按下那个按钮时,它会显示列表中的下一个项目,等等。或者,如果有另一种方式,我会很乐意接受任何建议。我正在尝试设计一个测试,这样学生就可以一次得到一个问题,他/她会提交答案,然后转到下一个问题。这就是我在JSP上显示完整列表的内容。 我的Servlet

        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>

4 个答案:

答案 0 :(得分:0)

ArrayList实现Iterable接口,并具有对其成员的基于索引的访问权限。您只需要阅读一些关于用法示例的Java文档。

答案 1 :(得分: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);

答案 2 :(得分:0)

由于它是一个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();
    }
}

答案 3 :(得分:0)

索引可以轻松访问ArrayList的元素。

从网页(由JSP构建),您可以使用查询参数请求特定问题,例如showquestion.jsp?question=4

然后,JSP生成的页面可以包含一个按钮,通过生成具有下一个更高索引的新链接(<a href="showquestion.jsp?question=5">Next</a>)来显示下一个问题,只要有更多问题。