Includi un altro file JSP


161

Attualmente sto cercando di imparare JSP. La mia domanda è, al momento, ho usato per includere l'intestazione e il piè di pagina della pagina usando:

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

e

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

Ma ora ho separato anche il contenuto della pagina. Quindi, se l'utente fa clic su una pagina, dicono i prodotti, deve caricare il file JSP che si trova in: includes/pages/products.jsp Così, il collegamento per l'utente è come: <a href="index.jsp?p=products">Products</a>.

Quindi, devo ottenere il valore p e visualizzare la pagina basata su di esso.

Di seguito è quello che ho fatto finora.

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

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

<% 
 }
%>

Quindi, come posiziono il valore della variabile "p" in posizione di "page_name"?

Oppure, c'è qualche altro metodo che potrei usare?

In PHP, potremmo usare il include()oinclude_once() . Sono un po 'bloccato in questo JSP. :(


1
Perché non codificare il nome pagina lì? comunque stai controllando P, allora sai che la pagina di distinzione sarà p.jsp, quindi qualche motivo per complicare?
Kosa,

Grazie per la risposta. Era per un esempio. In realtà, ho suddiviso la pagina in diversi. Ad esempio, se ho una pagina Prodotti nell'area di amministrazione, per aggiungere un nuovo prodotto, modificare un prodotto, cercare un prodotto, visualizzare un prodotto, ecc., È separato in sottopagine. Quindi, hardcoding ogni riga sembrerebbe brutta. Per esempio, per visualizzare il mio nome solo per 10 volte, potrei scegliere di stampare usando un ciclo o scrivere le 10 righe. Ma penso che scegliere il loop sia meglio. No? Penso che questa potrebbe essere la soluzione: stackoverflow.com/questions/482788/…
Akhilesh B Chandran,

Risposte:


231

Quello che stai facendo è un'inclusione statica. Un'inclusione statica viene risolta al momento della compilazione e pertanto non può utilizzare un valore di parametro, che è noto solo al momento dell'esecuzione.

Ciò di cui hai bisogno è una dinamica includere:

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

Nota che dovresti usare JSP EL piuttosto che scriptlet. Sembra anche che tu stia implementando un controller centrale con index.jsp. Dovresti invece utilizzare un servlet per farlo e inviarlo al JSP appropriato da questo servlet. O meglio, utilizzare un framework MVC esistente come Stripes o Spring MVC.


1
Grazie per i vostri suggerimenti. :) Ho provato a usare jsp: include tag. Ma in fase di esecuzione fornisce un errore di file non trovato. Dettagli eccezione: java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp. Sembra che <%= p %>sia usato così come è nel percorso del file!
Akhilesh B Chandran,

7
Non usare gli scriptlet. Usa JSP EL: page = "/ Includes / $ {param.p}". Oppure prova con page = "<% =" / Includes / "+ p%>".
JB Nizet,

3
Grazie. L'ho usato così: <jsp:include page="<%= "includes/" + p + ".jsp" %>" />e ora funziona :)
Akhilesh B Chandran,

2
Ottima risposta! Ho visto questo schema (controller centrale in index.jsp) troppe volte e porta sempre a problemi.
Matthias Hryniszak,

Non dovrebbe essere questo il tempo di traduzione? E penso che puoi ancora usare i parametri con quello?
Koray Tugay,

26

È possibile utilizzare parametri del genere

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

e

in about.jsp puoi prendere il parametro

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

18

È possibile utilizzare le direttive Includi

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

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

<% 
 }
%>

o JSP Includi azione

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

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

<% 
 }
%>

il diverso è include direttiva include un file durante la fase di traduzione. mentre l'azione Includi JSP include un file al momento della richiesta della pagina

Raccomando Spring MVC Framework come controller per manipolare le cose. usa il pattern url invece del parametro.

esempio:

www.yourwebsite.com/products

invece di

www.yourwebsite.com/?p=products

Guarda questo video Spring MVC Framework


1
il video è protetto .. condividilo con il pubblico
AutoMEta,

Puoi verificare se il tuo primo esempio funziona davvero? Non riesco a farlo funzionare.
Jus12

8

Al momento della traduzione della pagina, il contenuto del file fornito nella direttiva include viene "incollato" così com'è, nel luogo in cui viene utilizzata la direttiva include JSP. Quindi la pagina JSP di origine viene convertita in una classe servlet java. Il file incluso può essere una risorsa statica o una pagina JSP. Generalmente, JSP include la direttiva viene utilizzata per includere banner e piè di pagina di intestazione.

Sintassi per includere un file jsp:

<%@ include file="relative url">

Esempio

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

6

1. <a href="index.jsp?p=products">Products</a>quando l'utente fa clic sul collegamento Prodotti, è possibile chiamare direttamente products.jsp.

Voglio dire che puoi mantenere il nome del file JSP uguale al parametro Value.

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

%>    

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

<% 
 }
%>

o

2.puoi conservare un file di risorse esterno con coppie chiave-valore. come sotto

products : products.jsp

customer : customers.jsp

è possibile recuperare a livello di codice il nome del file JSP dal file di proprietà.

in questo modo puoi facilmente cambiare il nome del file JSP


Grazie. Sto usando la prima cosa al momento. In realtà, sto avendo problemi con come farlo!
Akhilesh B Chandran,

org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found. Ha funzionato al tuo fianco?
Akhilesh B Chandran,

questo è il problema relativo al percorso controlla se il file esiste nel tuo percorso, immagino che manchi il percorso di contesto mancante (dovrebbe essere include / admin.jsp). Non ho simulato tra me e il mio lato
Balaswamy Vaddeman

1
Ho provato a fare eco al valore di "p". Si tratta di: includes/add.jsp. Poi usato questo in include derivato: <%@ include file="includes/add.jsp" %>. Mostra i contenuti della pagina. Ma se uso invece questa linea: <%@ include file="<%=p%>" %>mostra un'eccezione!
Akhilesh B Chandran,

Ciao, ho lo stesso problema. Errore File "<%=p%>" not found. Se userò il valore reale sta funzionando.
Reddy SK,

0

Per un motivo che non ho ancora capito, dopo aver usato il <%@include file="includes/footer.jsp" %>mio index.jsppoi negli altri file jsp come register.jspdovevo usare <%@ include file="footer.jsp"%>. Come vedi non c'era più bisogno di usare il percorso completo, STS aveva memorizzato il mio percorso iniziale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.