如何从java arraylist到jsp脚本获取单个元素?

时间:2014-07-07 09:36:14

标签: java arrays jsp arraylist

/ * java code * /

String abc=request.getParameter("name");

dbLayer cmmntdb=new dbLayer();

ArrayList<String> cmmnts=cmmntdb.getcmmnts(abc);

int size=cmmnts.size();

for(int i=0;i<size;i++)
{


String pk_cmmnt_id=cmmnts.get(0);

String name=cmmnts.get(1);

String comment=cmmnts.get(2);

String updated_at=cmmnts.get(3);

/ * java script * /

document.getElementById("cmnt_id").innerHTML="<%=pk_cmmnt_id.toString()%>";
document.getElementById("name").innerHTML="<%=name.toString()%>";
document.getElementById("upd_at").innerHTML="<%=updated_at.toString()%>";
document.getElementById("cmnt").innerHTML="<%=comment.toString()%>";

后跟html内容,包括上述id的标签。

}

for循环在这里关闭。


在tomcat服务器6中运行项目时的输出窗口:

ID:1

姓名:rahul

Update_at:2014-07-05 22:54:11.0

评论:好

ID:

姓名:

Update_at:

评论:

ID:

姓名:

Update_at:

评论:


这里生成的html内容最大为array-list的大小,第一个html表中的标签用array-list元素填充,但是循环生成的所有其他表都是空的(不是由array-list值填充) )。如何在JSP中获取所有数组列表值?我的数组列表的大小是29.我必须从输出窗口的array-list中获取所有值。 任何一段代码都会受到赞赏和提前感谢。

2 个答案:

答案 0 :(得分:0)

你正在做的是在所有迭代中更新示例HTML元素,所以请参考这个关于如何使用JSP创建动态表的好例子

http://www.developer.com/lang/other/article.php/724181/JSP-Creating-Dynamic-Tables.htm

由于

答案 1 :(得分:0)

你的for循环有3个问题。首先,每次迭代都会覆盖相同的字段。其次,循环内的列表由常量值索引。因此无论循环执行多少次,它总是访问相同的值。第三个循环是将i递增1,而你在里面一次访问4个元素,这可能会导致无效数据。所以假设这是一个jsp脚本,你需要像

那样修改循环
<% for(int i = 0; i < comments.size(); i+=4) {             
%>
    <label>ID: <%= comments.get(i) %></label><br/>
    <label>Name: <%= comments.get(i+1) %></label><br/>
    <label>Update_at: <%= comments.get(i+2) %></label><br/>
    <label>Comment: <%= comments.get(i+3) %></label><br/>
<% } %>

你可以修改里面的html。同样使用这种方法,你应该确保数组大小是4的倍数,否则你将在ArrayOutOfBoundException中结束。

说过我会说这不是一个好方法。对于这些要求,您应该考虑创建一个值对象,然后使用JSTL进行迭代。我在这种情况下创建了一个名为Comment的VO

public class Comment {
    private String commentId;
    private String commentedBy;
    private Date updateDate;
    private String commentText;

    public String getCommentId() {
        return commentId;
    }
    public void setCommentId(String commentId) {
        this.commentId = commentId;
    }
    public String getCommentedBy() {
        return commentedBy;
    }
    public void setCommentedBy(String commentedBy) {
        this.commentedBy = commentedBy;
    }
    public Date getUpdateDate() {
        return updateDate;
    }
    public void setUpdateDate(Date updateDate) {
        this.updateDate = updateDate;
    }
    public String getCommentText() {
        return commentText;
    }
    public void setCommentText(String commentText) {
        this.commentText = commentText;
    }
}

然后修改数据库cla以返回注释对象列表。

List<Comment> cmmnts = cmmntdb.getcmmnts(abc);

将此列表设置为在服务器端代码(servlet)中请求request.setAttribute("comments", cmmnts),然后在jsp中生成html,如

<c:forEach items="${comments}" var="comment">
    <label>ID: ${comment.commentId}</label><br/>
    <label>Name: ${comment.commentedBy}</label><br/>
    <label>Update_at: <fmt:formatDate pattern="yyyy-MM-dd" value="${comment.updateDate}" /></label><br/>
    <label>Comment: ${comment.commentText}</label><br/> 
</c:forEach>

希望这有帮助。