2010-04-12 22 views
16

Giả sử rằng requestScope.importMe đang mong đợi một đường dẫn đến một tập tin JSPLàm cách nào để kiểm tra xem tệp có tồn tại trước khi đưa/nhập tệp vào JSP không?

<c:choose> 
    <c:when test="${!empty requestScope.importMe && fileExists(requestScope.importMe) }"> 
    <c:import url="${requestScope.importMe}" /> 
    ... 
</c:choose> 

Làm thế nào tôi có thể kiểm tra nếu tập tin tồn tại trước khi cố gắng để bao gồm nó để một lỗi không ném?

Tôi thích giải pháp sử dụng thẻ JSTL hơn.

Trả lời

21

Đặt mã vào thẻ c:catch. Nó sẽ bắt bất kỳ ném Exception cho bạn.

<c:catch var="e"> 
    <c:import url="${url}" /> 
</c:catch> 
<c:if test="${!empty e}"> 
    Error: ${e.message} 
</c:if> 

Tôi phải thừa nhận rằng tôi không thích cách tiếp cận c:catch. Nó lạm dụng các ngoại lệ để kiểm soát luồng. Nếu bạn có thể, thay vì làm công việc này trong một servlet hoặc JavaBean thay vào đó với sự giúp đỡ của File#exists() (và ServletContext#getRealPath()).

+0

Xin chào @BalusC! Tôi cũng đang tìm kiếm một bản thực hiện giống như được đưa ra trong câu trả lời của bạn. Tôi tìm kiếm trên các bài viết SO, nhưng tôi nghĩ câu trả lời của bạn là cách dễ dàng nhất để thực hiện các nhu cầu của tôi và tôi không chắc chắn sẽ tái đặt câu hỏi về một cái gì đó đã được yêu cầu. Tôi cần phải nhập vào một url động jstl: Tôi cố gắng tải url của một khu vực cụ thể (ví dụ: ./3/myJspx.jspx và trong trường hợp tệp không thể tìm thấy, nó dự phòng thành vùng mặc định jspx: ./myJspx .jspx .. Cho rằng nhiều thời gian đã trôi qua bởi câu trả lời của bạn, trong khi đó, bạn đã đưa ra bất kỳ giải pháp nào khác hoặc bạn có gợi ý nào khác không? – gipinani

4

@BalusC khá thông minh và có thể trả lời câu hỏi. Tuy nhiên, để hoàn thành, không có gì trong JSTL tiêu chuẩn sẽ làm những gì bạn muốn, nhưng bạn chắc chắn có thể tạo ra các chức năng EL của riêng bạn mà bạn có thể sử dụng để thực hiện kiểm tra. Rõ ràng bạn sẽ cần phải viết Java cho nó, nhưng nó không phải là nội tuyến trong các JSP của bạn.

Hướng dẫn J2EE 1.4 có section khi tạo các chức năng EL của riêng bạn.

+0

Chi tiết về cách tạo java của riêng bạn được giải thích trong câu hỏi stackOverflow này ... http: //stackoverflow.com/questions/16788790/include-css-file-in-jsp-only-if-it-exist –

+0

@WillHartung: Liên kết phần ở trên không còn khoan xuống phần bạn đang đề cập đến (tôi nghĩ) Bạn có thể đưa phần chính của câu trả lời vào câu hỏi nếu câu hỏi đó không quá lớn hay sửa liên kết không? – yochannah

Các vấn đề liên quan