Bao gồm một tệp tin JSP khác


161

Tôi hiện đang cố gắng học hỏi JSP. Câu hỏi của tôi là, hiện tại tôi đã sử dụng để bao gồm đầu trang và chân trang của trang bằng cách sử dụng:

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

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

Nhưng bây giờ, tôi cũng đã tách nội dung trang. Vì vậy, nếu người dùng nhấp vào một trang, giả sử các sản phẩm, nó phải tải tệp JSP nằm ở: includes/pages/products.jsp Vì vậy, liên kết đến người dùng giống như : <a href="index.jsp?p=products">Products</a>.

Vì vậy, tôi phải lấy giá trị p và hiển thị trang dựa trên nó.

Sau đây là những gì tôi đã làm cho đến nay.

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

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

<% 
 }
%>

Vậy, làm cách nào để đặt giá trị của biến "p" vào vị trí của "page_name"?

Hoặc, có phương pháp nào khác mà tôi có thể sử dụng không?

Trong PHP, chúng ta có thể sử dụng include()hoặc include_once(). Tôi hơi bị mắc kẹt trong bản JSP này. :


1
Tại sao không mã hóa pagename ở đó? dù sao bạn đang kiểm tra P, thì bạn biết trang phân biệt sẽ là p.jsp, vậy lý do nào để làm phức tạp?
kosa

Cảm ơn vì đã trả lời. Đó là một ví dụ. Trên thực tế, tôi đã chia trang thành nhiều. Ví dụ: nếu tôi có trang Sản phẩm trong khu vực quản trị, để thêm sản phẩm mới, chỉnh sửa sản phẩm, tìm kiếm sản phẩm, xem sản phẩm, v.v. thì nó được tách thành các trang phụ. Vì vậy, mã hóa từng dòng sẽ trông khó chịu. Giả sử, để hiển thị tên của tôi chỉ 10 lần, tôi có thể chọn in bằng vòng lặp hoặc viết xuống 10 dòng. Nhưng tôi nghĩ, chọn vòng lặp là tốt hơn. Phải không? Tôi nghĩ rằng, đây có thể là giải pháp: stackoverflow.com/questions/482788/
Kẻ

Câu trả lời:


231

Những gì bạn đang làm là một tĩnh bao gồm. Bao gồm tĩnh được giải quyết tại thời gian biên dịch và do đó có thể không sử dụng giá trị tham số, chỉ được biết tại thời điểm thực hiện.

Những gì bạn cần là một năng động bao gồm:

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

Lưu ý rằng bạn nên sử dụng JSP EL chứ không phải scriptlets. Có vẻ như bạn đang triển khai một bộ điều khiển trung tâm với index.jsp. Thay vào đó, bạn nên sử dụng một servlet để thực hiện điều đó và gửi tới tệp JSP thích hợp từ servlet này. Hoặc tốt hơn, sử dụng một khung MVC hiện có như Sọc hoặc Spring MVC.


1
Cảm ơn lời đề nghị của bạn. :) Tôi đã thử sử dụng thẻ jsp: bao gồm. Nhưng trong thời gian chạy, nó cung cấp một tập tin không tìm thấy lỗi. Chi tiết ngoại lệ : java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp. Có vẻ như <%= p %>được sử dụng như trong đường dẫn tập tin!
Akhilesh B Chandran

7
Đừng sử dụng scriptlets. Sử dụng JSP EL: page = "/ gồm / $ {param.p}". Hoặc thử với page = "<% =" / gồm / "+ p%>".
JB Nizet

3
Cảm ơn bạn. Tôi đã sử dụng nó như thế này: <jsp:include page="<%= "includes/" + p + ".jsp" %>" />và nó hoạt động ngay bây giờ :)
Akhilesh B Chandran

2
Câu trả lời rất hay! Tôi đã thấy mẫu này (bộ điều khiển trung tâm trong index.jsp) quá nhiều lần và nó luôn dẫn đến sự cố.
Matthias Hryniszak

Không phải đó là thời gian dịch? Và tôi nghĩ bạn vẫn có thể sử dụng các tham số với điều đó?
Koray Tugay

26

Bạn có thể sử dụng các tham số như thế

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

trong about.jsp bạn có thể lấy tham số

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

18

Bạn có thể sử dụng Chỉ thị bao gồm

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

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

<% 
 }
%>

hoặc JSP Bao gồm hành động

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

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

<% 
 }
%>

khác nhau là bao gồm chỉ thị bao gồm một tệp trong giai đoạn dịch. trong khi JSP Bao gồm hành động bao gồm một tệp tại thời điểm trang được yêu cầu

Tôi khuyên dùng Spring MVC Framework làm bộ điều khiển của bạn để thao tác mọi thứ. sử dụng mẫu url thay vì tham số.

thí dụ:

www.yourwebsite.com/products

thay vì

www.yourwebsite.com/?p=products

Xem video này Spring MVC Framework


1
video được bảo vệ .. vui lòng chia sẻ nó ra công chúng
AutoMEta

Bạn có thể kiểm tra nếu ví dụ đầu tiên của bạn thực sự hoạt động? Tôi dường như không thể làm cho nó hoạt động.
Jus12

8

Tại thời điểm dịch trang, nội dung của tệp được đưa ra trong lệnh bao gồm được 'dán' như ở đó, tại nơi sử dụng lệnh bao gồm JSP. Sau đó, trang JSP nguồn được chuyển đổi thành một lớp java servlet. Tệp được bao gồm có thể là một tài nguyên tĩnh hoặc một trang JSP. Nói chung, JSP bao gồm chỉ thị được sử dụng để bao gồm các biểu ngữ tiêu đề và chân trang.

Cú pháp bao gồm tệp jsp:

<%@ include file="relative url">

Thí dụ

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

6

1. <a href="index.jsp?p=products">Products</a>khi người dùng nhấp vào liên kết Sản phẩm, bạn có thể gọi trực tiếp sản phẩm.jsp.

Ý tôi là bạn có thể duy trì tên của tệp tin giống như Giá trị tham số.

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

%>    

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

<% 
 }
%>

hoặc là

2.bạn có thể duy trì tệp tài nguyên bên ngoài với các cặp khóa, giá trị. như dưới đây

products : products.jsp

customer : customers.jsp

bạn có thể lấy tên của tệp tin theo cách lập trình từ tệp tin thích hợp.

bằng cách này bạn có thể dễ dàng thay đổi tên của tệp tin JSP


Cảm ơn bạn. Tôi đang sử dụng điều đầu tiên tại thời điểm này. Trên thực tế, tôi đang có vấn đề với cách làm này!
Akhilesh B Chandran

org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found. Điều đó đã làm việc ở phía bạn?
Akhilesh B Chandran

Đây là vấn đề liên quan đến đường dẫn kiểm tra xem tập tin có tồn tại trong đường dẫn của bạn không, tôi đoán bạn thiếu đường dẫn ngữ cảnh (nên bao gồm / admin.jsp). Tôi chưa mô phỏng entre scenerio phía tôi
Balaswamy Vaddeman 2/212

1
Tôi đã cố gắng lặp lại giá trị của "p". Đó là : includes/add.jsp. Sau đó, sử dụng này trong đạo hàm bao gồm : <%@ include file="includes/add.jsp" %>. Nó hiển thị nội dung trang. Nhưng nếu tôi sử dụng dòng này thay thế : <%@ include file="<%=p%>" %>, nó cho thấy ngoại lệ!
Akhilesh B Chandran

Xin chào, tôi có vấn đề tương tự. Bắt lỗi File "<%=p%>" not found. Nếu tôi sẽ sử dụng giá trị thực nó đang làm việc.
Reddy SK

0

Vì một lý do tôi chưa hiểu, sau khi tôi sử dụng <%@include file="includes/footer.jsp" %>trong index.jspcác tệp jsp khác như register.jsptôi phải sử dụng <%@ include file="footer.jsp"%>. Như bạn thấy không cần sử dụng đường dẫn đầy đủ nữa, STS đã lưu trữ đường dẫn ban đầu của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.