在 JSP 中迭代 ArrayList

Posted

技术标签:

【中文标题】在 JSP 中迭代 ArrayList【英文标题】:Iterate ArrayList in JSP 【发布时间】:2013-04-30 02:49:24 【问题描述】:

我的班级中有两个数组列表,我想将它发送到我的 JSP,然后在选择标记中迭代数组列表中的元素。

这是我的课:

package accessData;

import java.util.ArrayList;

public class ConnectingDatabase 

   ArrayList<String> food=new ArrayList<String>();
   food.add("mango");
   food.add("apple");
   food.add("grapes");

   ArrayList<String> food_Code=new ArrayList<String>();
   food.add("man");
   food.add("app");
   food.add("gra");

我想在 JSP 中将 food_Code 作为选择标签中的选项和食物作为选择标签中的值进行迭代;我的 JSP 是:

<select id="food" name="fooditems">

// Don't know how to iterate

</select>

任何一段代码都受到高度赞赏。提前致谢:)

【问题讨论】:

你在使用任何框架或标签库吗? @Santosh 抱歉,我实际上使用的是 struts .. 那么JSTL 就可以开始了。 您可能想在food_Code 中添加"man""app""gra" 而不是food 【参考方案1】:

最好使用java.util.Map 来存储键和值,而不是两个ArrayList,例如:

Map<String, String> foods = new HashMap<String, String>();

// here key stores the food codes
// and values are that which will be visible to the user in the drop-down
foods.put("man", "mango");
foods.put("app", "apple");
foods.put("gra", "grapes");

// if this is your servlet or action class having access to HttpRequest object then
httpRequest.setAttribute("foods", foods); // so that you can retrieve in JSP

现在在 JSP 中迭代地图使用:

<select id="food" name="fooditems">
    <c:forEach items="$foods" var="food">
        <option value="$food.key">
            $food.value
        </option>
    </c:forEach>
</select>

或者没有 JSTL:

<select id="food" name="fooditems">

<%
Map<String, String> foods = (Map<String, String>) request.getAttribute("foods");

for(Entry<String, String> food : foods.entrySet()) 
%>

    <option value="<%=food.getKey()%>">
        <%=food.getValue() %>
    </option>

<%

%>

</select>

要了解更多关于使用 JSTL 进行迭代的信息,请参阅 SO answer,这里是 tutorial,了解如何使用 JSTL。

【讨论】:

你能给我 JSTL Core jar 的链接吗,因为我已经包含了 10 个 jar,但它仍然无法识别它,你真的很好谢谢 如果不是JSTL,至少脚本代码应该可以工作?您是否还检查了您的Map 是否包含至少一个元素?您如何设置要在 JSP 中访问的 foods 映射?这是包含jstl.jarstandard.jar的zip文件的链接:archive.apache.org/dist/jakarta/taglibs/standard/binaries/… 是的,我已经在控制台上打印了我的地图,它包含元素以及 jsp 如何知道课堂上的食物地图?当我在没有 jstl 的情况下使用它时,它无法识别我 jsp 中代码中的条目和食物.. JSP 会知道,当您知道时,您必须在 servlet 类或操作类中的请求范围 (request.setAttribute("foods", foods)) 或会话范围 (session.setAttribute("foods", foods)) 中设置映射可以访问HttpRequest 对象。在 JSP 中,如果您按照我的建议使用 EL,那么它很好,但如果您使用的是 scriptlet,那么您需要首先获取对象,因为我已经更新了我的答案。我建议只要有时间,请阅读关于 JSP/Servlets 的好教程或好书。了解其工作原理非常重要。 @Praksh K 我对这个服务器端工作非常陌生。仍然学习它只有几个月的时间。分享一个关于jsp/Servlets的好教程的链接【参考方案2】:

您可以在 JSP 中检索列表为

<select id="food" name="fooditems">

  <c:forEach items="$listname" var="food" >

     <option value="$food"> $food </option>

  </c:forEach>

</select>

【讨论】:

@venky foodItems="$foodItems" 不是&lt;c:forEach&gt; 的属性,它是items="$foodItems" 很抱歉,我错过了。实际上应该是这样的: 【参考方案3】:

您可以使用 JSTL 的 foreach。

<c:forEach items="$foodItems" var="item">
   $item
</c:forEach>

你还需要导入JSTL核心:

<%@ taglib prefix="c" 
       uri="http://java.sun.com/jsp/jstl/core" %>

【讨论】:

请把相关代码贴在这里,以后外链可能失效,让你的回答失效。 @Michal Borek 显示错误未定义属性 foodItems @Anish Sharma 您需要将该项目绑定到请求参数。 @MichalBorek foodItems="$foodItems" 不是&lt;c:forEach&gt; 的属性,它是items="$foodItems"【参考方案4】:
<c:forEach items="$list" var="foodItem">
 $foodItem.propertyOfBean
</c:forEach>

这会解决你的问题。

【讨论】:

它无法识别 c 标签,以及它如何知道 java 类中的“food”和“food_code”。 您必须在您的 jsp 文件中包含以下代码:&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %&gt; 你必须包含jstl core tag库。 foodItems= 不是属性,items 是。【参考方案5】:

有多种方法可以做到这一点(在您的方案中进行一些更改)

使用 JSTL:

    创建一个包含foodfood_code 两个字段的bean

    公开课食品 私人串食物; 私人字符串 food_code; // Setter/getter 跟随

现在页面上可用的arraylist 将是列表Food 对象。 在 JSP 代码中,您可以使用以下代码:

<select name="fooditems">
    <c:forEach items="$list" var="item">
        <option value="$item.food_code">$item.food</option>
    </c:forEach>
</select>

如果您使用的是 struts:

<html:select property="fooditems" >
<html:optionsCollection property="list" label="food" value="food_code" />
</html:select>

这里list 是对象键,将用于从上下文(页面/会话)中检索列表

【讨论】:

我已经包含了 struts 标签库,但它无法识别标签 html:selecct.. 您是否在顶部添加了指令 (&lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %&gt;) ? 我假设您在应用程序中包含了所需的 jar。您在日志中看到任何错误吗?生成的jsp的html源码是什么样子的?

以上是关于在 JSP 中迭代 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在jsp页面中使用jstl迭代地图来动态生成div? [复制]

在HandleBar jsp中迭代数组时访问JSON值

如何使用 JSTL 在 jsp 页面中迭代 ArrayList<HashMap<String, String>>

JSP迭代未显示

关于在jsp页面中使用/struts-tags标签库的迭代器时,从ValueStack获取参数使用EL的问题

JSTL标签用法 详解