在 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.jar
和standard.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>
【讨论】:
@venkyfoodItems="$foodItems"
不是<c:forEach>
的属性,它是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 您需要将该项目绑定到请求参数。 @MichalBorekfoodItems="$foodItems"
不是<c:forEach>
的属性,它是items="$foodItems"
【参考方案4】:
<c:forEach items="$list" var="foodItem">
$foodItem.propertyOfBean
</c:forEach>
这会解决你的问题。
【讨论】:
它无法识别 c 标签,以及它如何知道 java 类中的“food”和“food_code”。 您必须在您的 jsp 文件中包含以下代码:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
你必须包含jstl core tag
库。
foodItems=
不是属性,items
是。【参考方案5】:
有多种方法可以做到这一点(在您的方案中进行一些更改)
使用 JSTL:
创建一个包含food
和food_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.. 您是否在顶部添加了指令 (<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
) ?
我假设您在应用程序中包含了所需的 jar。您在日志中看到任何错误吗?生成的jsp的html源码是什么样子的?以上是关于在 JSP 中迭代 ArrayList的主要内容,如果未能解决你的问题,请参考以下文章
如何通过在jsp页面中使用jstl迭代地图来动态生成div? [复制]
如何使用 JSTL 在 jsp 页面中迭代 ArrayList<HashMap<String, String>>