问候,这是问题所在.我有一个名为entList.jsp的页面,它与集合一起使用: c:forEach var = "pack" items = "${packingList}"!--Here goes something with outputting the pack instance in a required format--/c:forEach 一切都很
<c:forEach var = "pack" items = "${packingList}"> <!--Here goes something with outputting the pack instance in a required format--> </c:forEach>
一切都很好,参数packingList作为请求的属性被调用此页面的动作处理程序传递.实际上,packingList的类型为Collection< GenericBean>.
事实证明,这个页面(它存储的片段)实际上非常有用,并且可以在许多具有不同集合的地方使用.所以我试着像这样包含这个页面(在另一个页面中):
<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标记的文档,但仍然不清楚 – 它似乎是唯一能以这种方式传递它的字符串参数(或者可以转换为字符串的东西),但没有复杂的对象.
您应该使用标记文件,并使用正确的参数类型声明标记.例如as 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 /标签中
然后,添加到您的jsp文件
<%@ taglib tagdir="/WEB-INF/tags" prefix="pack" %> <pack:packingList packingList="${packingList}"/>
有关详细信息,请参阅http://download.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html