Sertakan file JSP lain

161

Saat ini saya mencoba mempelajari JSP. Pertanyaan saya adalah, saat ini saya menggunakan header dan footer halaman menggunakan:

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

dan

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

Tapi sekarang, saya telah memisahkan konten halaman juga. Jadi, jika pengguna mengklik halaman, mengatakan produk, itu harus memuat file JSP yang terletak di: includes/pages/products.jsp Jadi, link ke pengguna seperti: <a href="index.jsp?p=products">Products</a>.

Jadi, saya harus mendapatkan nilai p dan menampilkan halaman berdasarkan itu.

Berikut ini adalah apa yang telah saya lakukan sejauh ini.

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

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

<% 
 }
%>

Jadi, bagaimana cara menempatkan nilai variabel "p" di posisi "page_name"?

Atau, adakah metode lain yang bisa saya gunakan?

Di PHP, kita bisa menggunakan include()atau include_once(). Saya agak terjebak dalam JSP ini. :(

Akhilesh B Chandran
sumber
1
Mengapa tidak membuat kode pagename di sana? Bagaimanapun Anda memeriksa P, maka Anda tahu halaman distination akan menjadi p.jsp, jadi ada alasan untuk menyulitkan?
kosa
Terima kasih telah membalas. Itu misalnya. Sebenarnya, saya telah membagi halaman menjadi beberapa. Misalnya, jika saya memiliki halaman Produk di area admin, untuk menambahkan produk baru, mengedit produk, mencari produk, melihat produk, dll. Itu dipisahkan menjadi sub halaman. Jadi, hardcoding setiap baris akan terlihat buruk. Katakan, untuk menampilkan nama saya hanya 10 kali, saya bisa memilih untuk mencetak menggunakan loop atau menuliskan 10 baris. Tapi saya pikir, memilih loop lebih baik. Bukan? Saya pikir, ini mungkin solusinya: stackoverflow.com/questions/482788/…
Akhilesh B Chandran

Jawaban:

231

Apa yang Anda lakukan adalah termasuk statis. Sertakan statis diselesaikan pada waktu kompilasi, dan karenanya mungkin tidak menggunakan nilai parameter, yang hanya diketahui pada waktu eksekusi.

Apa yang Anda butuhkan adalah dinamis termasuk:

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

Perhatikan bahwa Anda harus menggunakan JSP EL daripada scriptlets. Tampaknya Anda menerapkan pengontrol pusat dengan index.jsp. Anda harus menggunakan servlet sebagai gantinya, dan mengirim ke JSP yang sesuai dari servlet ini. Atau lebih baik, gunakan kerangka kerja MVC yang ada seperti Stripes atau Spring MVC.

JB Nizet
sumber
1
Terima kasih atas saran Anda. :) Saya sudah mencoba menggunakan jsp: include tag. Tetapi pada saat runtime, itu memberikan file tidak ditemukan kesalahan. Rincian pengecualian: java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp. Sepertinya <%= p %>digunakan seperti di jalur file!
Akhilesh B Chandran
7
Jangan gunakan skriplet. Gunakan JSP EL: page = "/ include / $ {param.p}". Atau coba dengan halaman = "<% =" / include / "+ p%>".
JB Nizet
3
Terima kasih. Saya menggunakannya seperti ini: <jsp:include page="<%= "includes/" + p + ".jsp" %>" />dan sekarang berfungsi :)
Akhilesh B Chandran
2
Jawaban yang sangat bagus Saya telah melihat pola ini (pengontrol pusat di index.jsp) terlalu banyak dan selalu menyebabkan masalah.
Matthias Hryniszak
Bukankah seharusnya itu waktu terjemahan? Dan saya pikir Anda masih bisa menggunakan parameter dengan itu?
Koray Tugay
26

Anda dapat menggunakan parameter seperti itu

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

dan

di about.jsp Anda dapat mengambil paramter

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

Anda dapat menggunakan Sertakan Petunjuk

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

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

<% 
 }
%>

atau JSP Include Action

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

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

<% 
 }
%>

yang berbeda adalah memasukkan direktif termasuk file selama fase terjemahan. sementara JSP Include Action menyertakan file pada saat halaman diminta

Saya merekomendasikan Spring MVC Framework sebagai pengontrol Anda untuk memanipulasi sesuatu. gunakan pola url sebagai ganti parameter.

contoh:

www.yourwebsite.com/products

dari pada

www.yourwebsite.com/?p=products

Tonton video ini Spring MVC Framework

Jaymelson Galang
sumber
1
video dilindungi .. tolong bagikan ke publik
AutoMEta
Bisakah Anda memeriksa apakah contoh pertama Anda benar-benar berfungsi? Sepertinya saya tidak bisa membuatnya bekerja.
Jus12
8

Pada waktu terjemahan halaman, konten file yang diberikan dalam directive include 'ditempelkan' sebagaimana adanya, di tempat JSP include directive digunakan. Kemudian halaman JSP sumber dikonversi menjadi kelas java servlet. File yang disertakan dapat berupa sumber daya statis atau halaman JSP. Secara umum, JSP termasuk direktif digunakan untuk memasukkan spanduk header dan footer.

Sintaks untuk menyertakan file jsp:

<%@ include file="relative url">

Contoh

<%@include file="page_name.jsp" %>
Aravind Cheekkallur
sumber
6

1.<a href="index.jsp?p=products">Products</a> saat pengguna mengklik tautan Produk, Anda dapat langsung menghubungi products.jsp.

Maksud saya, Anda dapat mempertahankan nama file JSP sama dengan Nilai parameter.

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

%>    

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

<% 
 }
%>

atau

2.Anda dapat memelihara file sumber daya eksternal dengan kunci, pasangan nilai. seperti di bawah ini

products : products.jsp

customer : customers.jsp

Anda secara programatik dapat mengambil nama file JSP dari file properies.

dengan cara ini Anda dapat dengan mudah mengubah nama file JSP

Balaswamy Vaddeman
sumber
Terima kasih. Saya menggunakan hal pertama saat ini. Sebenarnya, saya punya masalah dengan bagaimana melakukan ini!
Akhilesh B Chandran
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found. Apakah itu berhasil di pihak Anda?
Akhilesh B Chandran
ini adalah jalur terkait masalah memeriksa apakah file ada di jalur Anda, saya kira jalur konteks yang hilang (harus termasuk / admin.jsp). Saya belum mensimulasikan entre scenerio sisi saya
Balaswamy Vaddeman
1
Saya telah mencoba menggemakan nilai "p". Ini adalah: includes/add.jsp. Kemudian digunakan ini dalam termasuk derivatif: <%@ include file="includes/add.jsp" %>. Ini menunjukkan konten halaman. Tetapi jika saya menggunakan baris ini sebagai gantinya:, <%@ include file="<%=p%>" %>ini menunjukkan pengecualian!
Akhilesh B Chandran
Hai, saya punya masalah yang sama. Mendapatkan kesalahan File "<%=p%>" not found. Jika saya akan menggunakan nilai riil itu berfungsi.
Reddy SK
0

Untuk suatu alasan saya belum mengerti, setelah saya gunakan <%@include file="includes/footer.jsp" %>di index.jspfile jsp register.jspsaya yang lain seperti yang harus saya gunakan <%@ include file="footer.jsp"%>. Seperti yang Anda lihat, tidak perlu lagi menggunakan path lengkap, STS telah menyimpan path awal saya.

Lekakos Theodore
sumber