Dołącz inny plik JSP


161

Obecnie próbuję się nauczyć JSP. Moje pytanie brzmi, że w tej chwili nagłówek i stopkę strony umieszczałem za pomocą:

<%@include file="includes/header.jsp" %>

i

<%@include file="includes/footer.jsp" %>

Ale teraz oddzieliłem również zawartość strony. Tak więc, jeśli użytkownik kliknie na stronie produkty powiedzieć, że ma do załadowania pliku JSP, który znajduje się w: includes/pages/products.jsp Tak, link do użytkownika jest podobny: <a href="index.jsp?p=products">Products</a>.

Muszę więc uzyskać wartość p i wyświetlić na jej podstawie stronę.

Oto, co zrobiłem do tej pory.

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="includes/page_name.jsp" %>

<% 
 }
%>

Jak więc umieścić wartość zmiennej „p” na pozycji „nazwa_strony”?

A może jest jakaś inna metoda, której mógłbym użyć?

W PHP moglibyśmy użyć include()lub include_once(). Trochę utknąłem w tym JSP. :(


1
Dlaczego nie zakodować tam na stałe nazwy strony? tak czy inaczej sprawdzasz P, to wiesz, że strona rozróżnienia będzie p.jsp, więc czy jest jakiś powód do komplikowania?
kosa

Dzięki za odpowiedź. To był przykład. Właściwie podzieliłem stronę na kilka. Na przykład, jeśli mam stronę Produkty w obszarze administracyjnym, aby dodać nowy produkt, edytować produkt, wyszukać produkt, wyświetlić produkt itp., Jest ona podzielona na podstrony. Tak więc zakodowanie na stałe każdej linii wyglądałoby paskudnie. Powiedzmy, że aby wyświetlić swoje imię tylko 10 razy, mógłbym wydrukować za pomocą pętli lub zapisać 10 wierszy. Ale myślę, że wybór pętli jest lepszy. Prawda? Myślę, że to może być rozwiązanie: stackoverflow.com/questions/482788/…
Akhilesh B Chandran

Odpowiedzi:


231

To, co robisz, to statyczne dołączanie. Statyczne dołączenie jest rozwiązywane w czasie kompilacji i dlatego może nie używać wartości parametru, która jest znana tylko w czasie wykonywania.

Potrzebujesz dynamiki, w tym:

<jsp:include page="..." />

Zauważ, że powinieneś używać JSP EL zamiast skryptletów. Wygląda również na to, że implementujesz centralny kontroler z index.jsp. Zamiast tego należy użyć serwletu i wysłać do odpowiedniego JSP z tego serwletu. Lub lepiej, użyj istniejącej struktury MVC, takiej jak Stripes lub Spring MVC.


1
Dzięki za sugestie. :) Próbowałem użyć tagu jsp: include. Ale w czasie wykonywania wyświetla błąd „nie znaleziono pliku”. Szczegóły wyjątku: java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp. Wygląda na <%= p %>to, że jest używany w takiej postaci, w jakiej znajduje się w ścieżce pliku!
Akhilesh B Chandran

7
Nie używaj skryptletów. Użyj JSP EL: page = "/ include / $ {param.p}". Lub spróbuj z page = "<% =" / include / "+ p%>".
JB Nizet

3
Dziękuję Ci. Użyłem tego w ten sposób: <jsp:include page="<%= "includes/" + p + ".jsp" %>" />i teraz działa :)
Akhilesh B Chandran

2
Bardzo dobra odpowiedź! Widziałem ten wzorzec (centralny kontroler w index.jsp) zbyt wiele razy i zawsze prowadzi to do problemów.
Matthias Hryniszak

Czy nie powinien to być czas tłumaczenia? I myślę, że nadal możesz używać do tego parametrów?
Koray Tugay

26

Możesz użyć takich parametrów

<jsp:include page='about.jsp'>
    <jsp:param name="articleId" value=""/>
</jsp:include>

i

w about.jsp możesz wziąć parametr

<%String leftAds = request.getParameter("articleId");%>

18

Możesz użyć dyrektyw włączania

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<%@include file="<%="includes/" + p +".jsp"%>"%>

<% 
 }
%>

lub JSP Include Action

<%
 if(request.getParameter("p")!=null)
 { 
   String p = request.getParameter("p");
%>    

<jsp:include page="<%="includes/"+p+".jsp"%>"/>

<% 
 }
%>

inna dyrektywa is include zawiera plik w fazie tłumaczenia. podczas gdy akcja JSP Include zawiera plik w momencie żądania strony

Polecam Spring MVC Framework jako kontroler do manipulowania rzeczami. użyj wzorca adresu URL zamiast parametru.

przykład:

www.yourwebsite.com/products

zamiast

www.yourwebsite.com/?p=products

Obejrzyj ten film Spring MVC Framework


1
film jest chroniony ... proszę o udostępnienie go publicznie
AutoMEta

Czy możesz sprawdzić, czy Twój pierwszy przykład faktycznie działa? Nie wydaje mi się, żeby to działało.
Jus12

8

W czasie tłumaczenia strony zawartość pliku podanego w dyrektywie include jest „wklejana” w takiej postaci, w jakiej jest, w miejscu, w którym używana jest dyrektywa JSP include. Następnie źródłowa strona JSP jest konwertowana na klasę serwletu Java. Dołączony plik może być zasobem statycznym lub stroną JSP. Ogólnie rzecz biorąc, dyrektywa JSP obejmuje banery nagłówkowe i stopki.

Składnia dołączania pliku jsp:

<%@ include file="relative url">

Przykład

<%@include file="page_name.jsp" %>

6

1. <a href="index.jsp?p=products">Products</a>kiedy użytkownik kliknie link Produkty, możesz bezpośrednio wywołać products.jsp.

Mam na myśli, że możesz zachować nazwę pliku JSP taką samą jak wartość parametru.

<%
 if(request.getParameter("p")!=null)
 { 
   String contextPath="includes/";
   String p = request.getParameter("p");
   p=p+".jsp";
   p=contextPath+p;

%>    

<%@include file="<%=p%>" %>

<% 
 }
%>

lub

2. możesz utrzymywać zewnętrzny plik zasobów z parami klucz, wartość. jak poniżej

products : products.jsp

customer : customers.jsp

możesz programowo pobrać nazwę pliku JSP z pliku właściwości.

w ten sposób możesz łatwo zmienić nazwę pliku JSP


Dziękuję Ci. W tej chwili używam pierwszej rzeczy. Właściwie mam problem z tym, jak to zrobić!
Akhilesh B Chandran

org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found. Czy to zadziałało po twojej stronie?
Akhilesh B Chandran

Kwestia ta jest sprawdzenie ścieżki związane jeśli plik istnieje w ur ścieżki, chyba ur brakuje ścieżka kontekstu (powinny być includes / admin.jsp) .I nie symulowane entre scenerio moja strona
Balaswamy Vaddeman

1
Próbowałem powtórzyć wartość „p”. To jest: includes/add.jsp. Następnie stosuje się to w to pochodne: <%@ include file="includes/add.jsp" %>. Pokazuje zawartość strony. Ale jeśli zamiast tego użyję tej linii:, <%@ include file="<%=p%>" %>pokazuje wyjątek!
Akhilesh B Chandran

Cześć, mam ten sam problem. Pojawia się błąd File "<%=p%>" not found. Jeśli użyję prawdziwej wartości, to działa.
Reddy SK,

0

Z jakiegoś powodu, którego jeszcze nie rozumiem, po tym, jak użyłem <%@include file="includes/footer.jsp" %>w moim, index.jspa następnie w innych plikach jsp, tak jak register.jspmusiałem użyć <%@ include file="footer.jsp"%>. Jak widać, nie było już potrzeby używania pełnej ścieżki, STS przechował moją początkową ścieżkę.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.