【问题标题】:How to obtain individual elements from java arraylist to jsp script?如何从 java arraylist 获取单个元素到 jsp 脚本?
【发布时间】:2014-08-27 17:58:06
【问题描述】:

/* java 代码 */

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 脚本 */

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 server 6 中运行项目时的输出窗口:

ID:1

姓名:拉胡尔

更新时间:2014-07-05 22:54:11.0

评论:不错

ID:

姓名:

更新时间:

评论:

ID:

姓名:

更新时间:

评论:


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

【问题讨论】:

  • System.out abc 和 tel 你知道吗?

标签: java arrays jsp arraylist


【解决方案1】:

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

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

的 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 以返回 cmets 对象列表。

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>

希望这会有所帮助。

【讨论】:

  • 我必须在哪里添加 request.setAttribute("cmets", cmmnts)?在 db 层,我使用 while 循环 Comment.add(rsval.getString("pk_cmmnt_id")) 从结果集中获取数据; Comment.add(rsval.getString("name")); Comment.add(rsval.getString("comment"));Comment.add(rsval.getString("updated_at"));
  • 你的服务器端框架是什么?是纯servlet还是struts还是spring?基于此,您需要适当地设置它。您评论中的 while 循环本质上是将字符串添加到列表中,这与您在问题中的代码相同。如果您打算根据我提到的 value object-jstl 方法修改代码,请告诉我您使用的技术,我可以为您创建示例代码。
【解决方案2】:

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

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

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多