类型为List <string>的方法add(String)不适用于参数(Map)</string>

时间:2014-02-10 06:33:30

标签: jsp jstl

我真的只是一个视觉网页设计师,我设法通过从网上获取一些资源来进行一些功能编码。我真正需要做的就是通过数组中的jsp显示html中的训练计划列表。我一直在寻找和尝试一些“方法”,我发现下面的代码,因为我认为最简单的做法。

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  

List<String> list = new ArrayList<String>();
Map course1 = new HashMap();
course1.put("code", "ME101");
course1.put("desc", "Marine Engineering 101");
course1.put("sched", "June 1 - August 30, 2014");
course1.put("rsvd", "56");
list.add(course1);

Map course2 = new HashMap();
course2.put("code", "ME102");
course2.put("desc", "Marine Engineering 102");
course2.put("sched", "September 1 - November 31, 2014");
course2.put("rsvd", "25");
list.add(course2);

Map course3 = new HashMap();
course3.put("code", "CSM101");
course3.put("desc", "Certificate on Seamanship 101");
course3.put("sched", "June 1 - June 30, 2014");
course3.put("rsvd", "36");
list.add(course3);  

pageContext.setAttribute("courses", list);

在html部分中,我有这些来显示值:

<c:forEach items="${courses}" var="current">
<tr>
    <td><c:out value="${current.code}" /><td>
    <td><c:out value="${current.desc}" /><td>
    <td><c:out value="${current.sched}" /><td>
    <td><c:out value="${current.rsvd}" /><td>
</tr>
</c:forEach>

问题是这些会产生错误

  

“List类型中的方法add(String)不适用于   参数(地图)“

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您将列表定义为字符串列表:

List<String> list = new ArrayList<String>();

但是您尝试将Map的实例添加到此列表中:

Map course1 = new HashMap();
...
list.add(course1);

字符串列表只能接受字符串,而不能接受地图。如果需要地图列表,则应将其定义为

List<Map> list = new ArrayList<Map>();

请注意,您的地图本身应该是强类型的:

List<Map<String, String>> list = new ArrayList<Map<String, String>>();
...
Map<String, String> course1 = new HashMap<String, String>();
course1.put("code", "ME101");