Передача списка в другой файл jsp
Я хотел передать объект типа List, который находится в главной JPS, чтобы включить JSP (jsp: include). Поскольку parm поддерживает только строки, я не могу использовать тег parm для передачи данных типа List в файл include.
Использует примеры:
<jsp:include page="/jsp/appList.jsp">
<jsp:param name="applications" value="${applications}"/>
</jsp:include>
Или:
<jsp:include page="/jsp/appList.jsp">
<jsp:param name="applications" value="${confirmed_applications}"/>
</jsp:include>
<jsp:include page="/jsp/appList.jsp">
<jsp:param name="applications" value="${unconfirmed_applications}"/>
</jsp:include>
<jsp:include page="/jsp/appList.jsp">
<jsp:param name="applications" value="${canceled_applications}"/>
</jsp:include>
Я мог бы создать Простой обработчик тегов, но я хотел бы знать, есть ли более простой способ.
Ответы
Ответ 1
Согласитесь с ChssPly76, что, вероятно, это признак проблемы, если Списка создается в JSP, но другой альтернативный подход, чтобы получить объект для другого JSP, заключается в том, чтобы добавить его в поле атрибута объектов HttpServletRequest с помощью scriplet:
JSP со списком:
<%
request.setAttribute("theList", ListObject);
%>
Другой JSP:
<%
List myList = (List) request.getAttribute("theList");
%>
Ответ 2
Это действительно то, для чего предназначены теги jsp. Вы создаете .tag файл, который принимает атрибуты (а не параметры), которые могут быть произвольного типа.
См. эту статью для хорошего учебника.
"Params" аналогичны параметрам, которые вы видите в HTTP-запросе (часть URL-адреса, следующая за "?" ).
Ответ 3
Как вы получаете этот список в своем основном JSP?
Если вы получаете его от модели (прямой/косвенный запрос/атрибут сеанса), вы можете передать имя этого атрибута в свой включенный JSP и получить его от модели:
<jsp:include page="/jsp/appList.jsp">
<jsp:param name="applications" value="confirmedApplications"/>
</jsp:include>
Если вы создаете или изменяете этот список в JSP, у вас действительно есть большие проблемы, то это:-), но вы можете привязать к своему списку, чтобы запросить под некоторым именем атрибута, а затем использовать вышеприведенный подход.
Ответ 4
Предполагая, что вы поместили список в область запроса и используя applications
в качестве имени вашего параметра, вы можете обратиться к списку, подобному этому ${requestScope[param.applications]}
Ответ 5
Вы можете передать объект List через requestScope:
<c:set var="listApplications" value="${applications}" scope="request"/>
<jsp:include page="/jsp/appList.jsp" />
И в appList.jsp вы можете получить список, используя
${requestScope.listApplications}
Ответ 6
Либо вы можете использовать объекты запроса или сеанса для передачи объектов.
Преимущество
Запрос - используйте запрос, поскольку его время жизни меньше по сравнению с объектом сеанса.
Сессия - вы можете получить тот же самый объект позже на другой странице или в действии
Ответ 7
Предположим, что у вас есть parent.jsp и child.jsp.
Вы хотите:
1) Включить child.jsp из parent.jsp,
2) Отправьте некоторые параметры из parent.jsp в child.jsp.
Выполните следующие действия:
1) В parent.jsp
`
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="items" value="${itemsFromDB}" scope="request"/>
<jsp:include page="child.jsp"/>
`
2) В child.jsp
<div>
alert("${requestScope.items}");
</div>
Вот и все.