【问题标题】:Iterate ArrayList in JSP在 JSP 中迭代 ArrayList
【发布时间】: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

标签: java jsp arraylist


【解决方案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:

  1. 创建一个包含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源码是什么样子的?
猜你喜欢
  • 2020-06-23
  • 1970-01-01
  • 2014-11-21
  • 2012-09-01
  • 2012-04-29
  • 2014-06-20
  • 2021-09-26
  • 2018-11-09
相关资源
最近更新 更多