jsp:param可以存储一个集合吗?

时间:2011-02-02 08:37:10

标签: jsp

问候,这是问题所在。我有一个名为 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标记的文档,但仍然不清楚 - 看起来你可以通过这种方式传递它的字符串参数(或者可以转换为字符串的东西),但没有复杂的对象。

1 个答案:

答案 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了解详情