在JSP中迭代ArrayList

10
我可以帮您翻译成中文。这段内容是关于编程的,讲述了一个类中有两个数组列表,需要将它们发送到 JSP 页面,并在 select 标签中迭代数组列表元素。以下是该类的代码:
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迭代为select标签中的选项,将food作为select标签中的值;我的JSP代码如下:
<select id="food" name="fooditems">

// Don't know how to iterate

</select>

任何一段代码都非常受欢迎。先行感谢 :)

你在使用任何框架或标签库吗? - Santosh
@Santosh 抱歉,我实际上正在使用 Struts。 - Anish Sharma
1
那么,开始使用JSTL会是一个不错的选择。 - Santosh
你可能想在 food_Code 中添加 "man""app""gra",而不是在 food 中添加。 - Rahul Bobhate
5个回答

18

使用一个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 中迭代 Map,请使用:

<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答案,这里还有一个关于如何通用地使用JSTL的教程


请问您能否给我 JSTL Core jar 的链接,因为我已经包含了10个jar文件但它仍然无法识别。 如果可以的话,非常感谢您。 谢谢。 - Anish Sharma
如果没有JSTL,脚本代码至少应该起作用吧?而且你有检查过你的Map是否包含至少一个元素吗?你是如何设置可以在 JSP 中访问 foods Map 的?这里是包含 jstl.jarstandard.jar 的压缩文件的链接:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.0.1.zip - Prakash K
是的,我已经在控制台上打印了我的地图,并且它包含元素。另外,JSP如何知道类中的食品地图?当我在JSP中不使用JSTL时,它无法识别代码中的Entry和foods。 - Anish Sharma
@Praksh K,我对服务器端工作非常陌生,还在学习阶段,只有几个月的时间。请分享一个关于JSP/Servlets的好教程链接。 - Anish Sharma
那本书太棒了,非常感谢。 但是我仍然在我的问题上遇到困难,我已经使用requestdispatcher将我的地图发送到jsp,但是select标签仍然为空。 请帮忙解决一下,谢谢。 - Anish Sharma
显示剩余3条评论

4
您可以使用JSTL的foreach。
<c:forEach items="${foodItems}" var="item">
   ${item}
</c:forEach>

你还需要导入JSTL核心:
```

您还需要导入JSTL核心:

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

2
请在此处发布相关代码,外部链接可能在未来失效,这将使您的答案无用。 - Uooo
@Michal Borek,它显示错误未定义属性foodItems。 - Anish Sharma
@Anish Sharma,您需要将该项绑定到请求参数。 - Michal Borek
1
@MichalBorek foodItems="${foodItems}" 不是 <c:forEach> 的属性,正确的应该是 items="${foodItems}" - Prakash K

4
<c:forEach items="${list}" var="foodItem">
 ${foodItem.propertyOfBean}
</c:forEach>

这将解决您的问题。

它无法识别C标签,而且它如何知道Java类中的“food”和“food_code”。 - Anish Sharma
你需要在你的JSP文件中包含以下代码:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> - Madhusudan Joshi
您必须包含“jstl核心标签”库。 - Madhusudan Joshi
foodItems=不是一个属性,items才是。 - Advaita Gosvami

1
您可以在 JSP 中检索列表,如下所示:

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

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

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

  </c:forEach>

</select>

@venky foodItems="${foodItems}" 不是 <c:forEach> 的属性,正确的应该是 items="${foodItems}" - Prakash K
很抱歉,我漏掉了。实际上应该是这样的:<select id="food" name="fooditems"> 谢谢。 - venky

0

有多种方法可以实现这个(需要对您的方案进行一些更改)

使用JSTL:

  1. 创建一个具有两个字段foodfood_code的bean

    public class Food{ private String food; private String food_code; // Setter/getters follows }

现在页面上可用的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:select标签。 - Anish Sharma
你在顶部是否包含了指令(<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>)? - Santosh
我假设你已经将所需的jar包包含在应用程序中了。你有在日志中看到任何错误吗?生成的JSP的HTML源代码是什么样子的? - Santosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接