问候,这是问题所在。我有一个名为 entList.jsp 的页面,它适用于集合:
<c:forEach var = "pack" items = "${packingList}">
<!--Here goes something with outputting the pack instance in a required format-->
</c:forEach>
一切都很好,参数 packingList 作为请求的属性被调用此页面的操作处理程序传递。实际上 packingList 的类型为 Collection&lt; GenericBean&gt; 。
事实证明,这个页面(它存储的片段)实际上非常有用,并且可以在许多具有不同集合的地方使用。所以我试着像这样包含这个页面(在另一页中):
<jsp:include page="entList.jsp">
<!-- Pass the required collection as a parameter-->
<jsp:param name = "packingList" value = "${traffic.packingList}"/>
</jsp:include>
但是,现在这个片段没有看到参数 packingList 。我试着像这样重写片段(因为现在它是一个参数):
<c:forEach var = "pack" items = "${param.packingList}">
<!--Here goes something with outputting the pack instance in a required format-->
</c:forEach>
但现在它会生成异常,因为它将 packingList 视为字符串而不是集合。所以现在解决方案是这样的 - 在动作处理程序代码中将所需的集合设置为属性:
// This is the original instance set by the action
request.setAttribute("traffic", traffic);
// And this is the additional one, to be used by entList.jsp
request.setAttribute("packingList", traffic.getPackingList());
所以问题是 - jsp:param 标签能否收到一个集合作为它的价值?我阅读了JSP标记的文档,但仍然不清楚 - 看起来你可以通过这种方式传递它的字符串参数(或者可以转换为字符串的东西),但没有复杂的对象。
答案 0 :(得分:6)
您应该使用标记文件,并使用正确的参数类型声明标记。
e.g。作为packingList.tag
<%@tag %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@attribute name="packingList" required="true" type="java.util.Collection<Packing>"
description="the packing list." %>
<c:forEach var = "pack" items = "${packingList}">
<!--Here goes something with outputting the pack instance in a required format-->
</c:forEach>
然后,将此文件放在WEB-INF/tags
然后,添加到您的jsp文件
<%@ taglib tagdir="/WEB-INF/tags" prefix="pack" %>
<pack:packingList packingList="${packingList}"/>
请参阅http://download.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html了解详情