2013-05-28 42 views
6

Tôi đang cố gắng thiết kế một ứng dụng có css mặc định. Tôi muốn có một tùy chọn mà tôi có thể bao gồm mới css (tùy chỉnh) tập tin mà thay đổi da mặc định.chỉ bao gồm tệp css trong jsp nếu nó tồn tại

Tôi có thể đạt được điều này bằng cách tham chiếu cả (tùy chỉnh và mặc định css) trong trang jsp của tôi, nơi mặc định sẽ luôn xuất hiện và tùy chỉnh css có thể được tải cho người dùng khác nhau.

Trong các cảnh quay nơi không có tệp tùy chỉnh, tôi nhận được lỗi 'Không tìm thấy tệp' (404) trong bảng điều khiển trình duyệt. Có cách nào (hoặc thẻ jstl) để kiểm tra xem tập tin tùy chỉnh tồn tại trước khi tôi bao gồm nó trong jsp?

+1

Kiểm tra này, đủ gần: http: // stackoverflow.com/questions/2624657/how-can-you-check-if-a-file-exists-before-including-importing-it-in-jsp –

+0

khối catch sẽ không giải quyết được vấn đề của tôi vì tôi đang sử dụng html 'liên kết' để bao gồm tệp css. tôi có thể bao gồm css bằng cách sử dụng jstl? – S4beR

Trả lời

7

Điều này không dễ dàng thực hiện với JSTL trực tiếp. Tôi sẽ đề nghị bạn sử dụng một lớp để kiểm tra xem tệp tồn tại và trả về một giá trị boolean. Điều này sẽ cho phép bạn sử dụng một JSTL chọn hoặc nếu tuyên bố để hoàn thành mục tiêu của bạn.

Sử dụng tệp lớp học có thể được tiếp cận theo nhiều cách. Tôi có lẽ sẽ viết một lớp tiện ích và tạo một taglib tùy chỉnh có thể được gọi là sử dụng EL/JSTL để thực hiện công việc. Bạn có thể xem ví dụ về loại phương pháp này tại đây: How to call a static method in JSP/EL?

Sau đây là ví dụ về lớp tiện ích tệp mà tôi đã sử dụng trước đây để kiểm tra tệp trong Tomcat.

package com.mydomain.util; 

public class FileUtil implements Serializable { 

    public static boolean fileExists(String fileName){ 
     File f = new File(getWebRootPath() + "css/" + fileName); 
     return f.exists(); 
    } 

    private static String getWebRootPath() { 
     return FileUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath().split("WEB-INF/")[0]; 
    } 
} 

Sau đó bên /WEB-INF/functions.tld, tạo định nghĩa của bạn:

<taglib xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" 
    version="2.0"> 

    <tlib-version>2.0</tlib-version> 
    <uri>http://www.your-domain.com/taglib</uri> 

    <function> 
     <name>doMyStuff</name> 
     <function-class>com.mydomain.util.FileUtil</function-class> 
     <function-signature> 
      java.lang.Boolean fileExists(java.lang.String) 
     </function-signature> 
    </function> 
</taglib> 

Các trong JSP:

<%@ taglib prefix="udf" uri="http://www.your-domain.com/taglib" %> 

<c:if test="${udf:fileExists('my.css')}"> 
     <!-- do magic --> 
</c:if> 
+0

hãy để tôi thử điều này. cảm ơn sự giúp đỡ – S4beR

+0

tôi đã thực hiện của riêng tôi như bạn mô tả. Cảm ơn – S4beR