2012-02-02 56 views
132

Tôi hiện đang cố gắng tìm hiểu JSP. Câu hỏi của tôi là, hiện nay tôi đã sử dụng để bao gồm các header và footer của trang sử dụng:Bao gồm một tệp JSP khác

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

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

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

Vì vậy, tôi phải nhận 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 thời điểm này.

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

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

<% 
} 
%> 

Vì vậy, làm cách nào để đặt giá trị của biến "p" ở 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 tôi có thể sử dụng include() hoặc include_once(). Tôi hơi bị kẹt trong JSP này. :(

+1

Tại sao không mã hóa pagename ở đó? anyways bạn đang kiểm tra cho P, sau đó bạn biết trang distination sẽ là p.jsp, vì vậy bất kỳ lý do để phức tạp? – kosa

+0

Cảm ơn bạn đã trả lời. Đó là một ví dụ. Trên thực tế, tôi đã chia nhỏ trang thành nhiều trang. Ví dụ: nếu tôi có trang Sản phẩm trong khu vực quản trị viên, để 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 ... nó được tách thành các trang phụ. Vì vậy, hardcoding mỗi dòng sẽ trông khó chịu. Nói, để hiển thị tên của tôi chỉ 10 lần, tôi có thể chọn in bằng cách sử dụng vòng lặp hoặc ghi lại 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ĩ, đây có thể là giải pháp: http://stackoverflow.com/questions/482788/how-to-include-a-runtime-file-for-include-in-jsp –

Trả lời

194

Điều bạn đang làm là bao gồm tĩnh. Một 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 một giá trị tham số, mà chỉ được biết đến tại thời gian thực hiện.

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

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

Lưu ý rằng bạn nên sử dụng JSP EL hơn scriptlets. Dường như bạn đang triển khai một bộ điều khiển trung tâm với index.jsp. Bạn nên sử dụng một servlet để làm điều đó thay vào đó, và gửi đến 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ư Stripes hoặc Spring MVC.

+1

Cảm ơn các đề xuất của bạn. :) Tôi đã thử sử dụng thẻ jsp: include. Nhưng trong thời gian chạy, nó cung cấp cho một tập tin không tìm thấy lỗi. Chi tiết ngoại lệ: 'java.io.FileNotFoundException:/includes/<% = p% > .jsp'. Có vẻ như '<%= p %> 'được sử dụng vì nó nằm trong đường dẫn tệp! –

+7

Không sử dụng tập lệnh. Sử dụng JSP EL: page = "/ includes/$ {param.p}". Hoặc thử với trang = "<% ="/bao gồm/"+ p%>". –

+3

Cảm ơn bạn. Tôi sử dụng nó như thế này: ' "/>' và nó đang hoạt động ngay bây giờ :) –

4

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ể trực tiếp gọi products.jsp.

Ý tôi là u có thể duy trì tên của tập tin JSP 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

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

products : products.jsp

customer : customers.jsp

bạn programatically có thể lấy tên của tập tin JSP từ file properies.

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

+0

Cảm ơn bạn. Tôi đang sử dụng điều đầu tiên vào lúc này. Trên thực tế, tôi đang gặp vấn đề với howto làm điều này! –

+0

Tôi đã chỉnh sửa câu trả lời –

+0

'org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: Tệp"/<%=p%> "không tìm thấy'. Điều đó có hiệu quả ở phía bạn không? –

13

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

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

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

<% 
} 
%> 

hoặc JSP Bao gồm Action

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

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

<% 
} 
%> 

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

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

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ệ .. hãy chia sẻ nó với công chúng – AutoMEta

+0

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

5

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

Cú pháp cho bao gồm một file jsp:

<%@ include file="relative url"> 

Ví dụ

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

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

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

trong about.jsp bạn có thể lấy paramt er

<%String leftAds = request.getParameter("articleId");%> 
Các vấn đề liên quan