Jes*_*ito 1 java foreach jsp jstl
我有一个for循环,当使用scriplet以下列方式填充items属性时,它工作正常:
<%
List<LandingCategory> cats = beanFactory.getLandingCategories();
%>
<c:forEach var="cat" items="<%=cats%>">
<c:out value="${cat.id}"/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
但是,当尝试使用另一个jsp文件中指定的参数填充项目列表时,for each将无效.
JSP1
<jsp:include page="/jsp/modules/index/index_categories.jsp">
<jsp:param name="categories" value="<%=cats%>"/>
</jsp:include>
JSP2
<c:forEach var="cat" items="${param.categories}">
<c:out value="${cat.id}"/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
抛出以下错误:
javax.servlet.jsp.el.ELException: Unable to find a value for "id" in object of class "java.lang.String" using operator "."
Run Code Online (Sandbox Code Playgroud)
似乎它正在考虑项目列表的对象是字符串,但我不知道为什么会发生这种情况.
有没有人有任何想法?
谢谢
该<jsp:param>标签提供仿真的排序参数,你会从HTTP请求传递的方式.因此,他们是字符串.所以JSP1正在做的是将你的"猫"集合转换为String(使用toString()),然后将该String作为参数传递给JSP2.然后foreach尝试迭代该字符串.该Cat数据结构迷失东京.
您需要做的是将cats对象存储为请求范围的属性,这将允许JSP2检索它:
<%
List<LandingCategory> cats = beanFactory.getLandingCategories();
%>
<c:set var="cats" scope="request" value="<%=cats%>"/>
<jsp:include page="/jsp/modules/index/index_categories.jsp"/>
Run Code Online (Sandbox Code Playgroud)