2011-02-02 4 views
4

Поздравления, вот в чем проблема. У меня есть страница под названием entList.jsp, который работает с коллекцией:Может ли jsp: param хранить коллекцию?

<c:forEach var = "pack" items = "${packingList}"> 
<!--Here goes something with outputting the pack instance in a required format--> 
</c:forEach> 

Все прекрасно работает, и параметр packingList передается в качестве атрибута запроса с помощью обработчика действий, который вызывает эту страницу , На самом деле упаковкаList имеет тип 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: пары тега получить коллекцию, как это значение? Я прочитал документацию для JSP-тегов, и она остается неясной - кажется, что единственное, что вы можете передать таким образом, это строковые параметры (или что-то, что может быть преобразовано в строку), но не сложные объекты.

ответ

6

вы должны использовать файл тега и объявить тег с правильными типами параметров.

например. в 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 для получения дополнительной информации

Смежные вопросы