2009-10-08 11 views
13

Chciałem przekazać obiekt typu listy, który jest w głównym JPS do JSP włączenia (jsp: include). Ponieważ parm obsługuje tylko łańcuchy, nie mogę użyć tagu parm, aby przekazać dane typu List do pliku dołączanego.Przekaż listę do innego pliku JSP

Używa przykłady:

<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="${applications}"/> 
</jsp:include> 

Lub:

<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> 

mogę stworzyć prosty Tag Handler, ale chciałbym wiedzieć, czy istnieje prostszy sposób.

Odpowiedz

7

Jest to istotnie, do czego służą znaczniki JSP. Tworzysz plik .tag, który akceptuje atrybuty (nie parametry), które mogą być dowolnego typu.

Aby uzyskać dobry samouczek, patrz this article.

"Parametry" są analogiczne do parametrów widzianych w zapytaniu HTTP (część adresu URL po znaku "?").

+0

Nie wiedziałem, że można utworzyć taglibs w czystym JSP. Wielki człowiek! Dzięki! –

+0

Tak, to działa świetnie. Mała uwaga: ważną częścią jest ustawienie ** typu ** atrybutu jako obiektu, w przeciwnym razie będzie traktowany jako ciąg. '<% @ nazwa atrybutu =" odpowiada "required =" true "type =" java.lang.Object "%>' –

3

Jak uzyskać tę listę na głównej stronie JSP?

Jeśli otrzymujesz go od modelu (bezpośrednie żądanie/pośredni/atrybut sesji) można podać nazwę atrybutu do zawartych JSP i ponownie uzyskać je od modelu tam:

<jsp:include page="/jsp/appList.jsp"> 
    <jsp:param name="applications" value="confirmedApplications"/> 
</jsp:include> 

Jeśli tworzysz lub modyfikujesz tę listę w samym JSP, masz poważniejsze problemy, to :-), ale możesz powiązać swoją listę, aby zażądać pod pewną nazwą atrybutu, a następnie zastosować powyższe podejście.

0

Można użyć obiektów żądania lub sesji do przesłania obiektów.

Advantage

Zapytanie - Wykorzystanie wniosek, jego trwania jest mniejsza w porównaniu do obiektu sesji.

Session - Można pobierać ten sam obiekt kiedyś później w inną stronę lub działania

2

Zakładając, że można umieścić listę na żądanie zakresie i przy użyciu applications jako nazwę swojej parametru można odnosić do listy tak ${requestScope[param.applications]}

10

Zgadzam się z ChssPly76 że jego prawdopodobnie oznaką kłopotów jeśli lista jest generowany w JSP, ale inny alternatywny podejście, aby uzyskać obiekt do innego JSP jest dodanie jej do HttpServletRequest obiektów pole atrybutu za pomocą scriplet:

JSP zt Lista on:

<% 
request.setAttribute("theList", ListObject); 
%> 

Drugi JSP:

<% 
List myList = (List) request.getAttribute("theList"); 
%> 
2

Można przekazać obiekt listy poprzez requestScope:

<c:set var="listApplications" value="${applications}" scope="request"/> 
<jsp:include page="/jsp/appList.jsp" /> 

I appList.jsp można pobrać listę za pomocą

${requestScope.listApplications} 
0

Załóżmy, że masz parent.jsp i child.jsp.

Chcecie:

1) obejmują child.jsp z parent.jsp, 2) Wyślij niektóre parametry z parent.jsp do child.jsp.

wykonać następujące kroki:

1) W 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) W child.jsp

<div> 
alert("${requestScope.items}"); 
</div> 

to wszystko.

Powiązane problemy