2013-05-28 23 views
6

我想用默認的css設計一個應用程序。我想有一個選項,我可以包含新的CSS(自定義)文件,它改變了默認的皮膚。只包含jsp中的css文件存在

我可以通過在我的jsp頁面中引用這兩個(自定義和默認的css),其中默認將始終存在,並可以爲不同的用戶加載自定義css。

在沒有自定義文件的情況下,我在瀏覽器控制檯中收到'File Not Found'(404)錯誤。有沒有一種方法(或jstl標籤)來檢查自定義文件是否存在,然後將其包含在jsp中?

+1

檢查這一點,非常接近:HTTP:// stackoverflow.com/questions/2624657/how-can-you-check-if-a-file-exists-before-including-importing-it-in-jsp –

+0

catch塊不會解決我的問題,因爲我使用html'link'標記以包含css文件。我可以使用jstl包含css嗎? – S4beR

回答

7

直接使用JSTL並不容易。我建議你使用一個類來檢查文件是否存在並返回一個布爾值。這將允許您使用JSTL選擇或if語句來實現您的目標。

使用類文件可以以多種方式處理。我可能會寫一個實用程序類並創建一個可以使用EL/JSTL來完成這個工作的自定義taglib。你可以在這裏看到這種類型的方法的一個例子:How to call a static method in JSP/EL?

以下是我過去用來檢查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]; 
    } 
} 

內。然後/WEB-INF/functions.tld,創建你的定義:

<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> 

中JSP:

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

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

讓我試試這個。感謝您的幫助 – S4beR

+0

我按照您的描述做了自己的實施。謝謝 – S4beR