2013-05-28 10 views
6

Próbuję zaprojektować aplikację z domyślnym css. Chcę mieć opcję, w której mogę dołączyć nowy plik css (niestandardowy), który zmienia domyślną karnację.obejmują plik css w jsp tylko jeśli istnieje

Mogę to osiągnąć, odnosząc się do obu (niestandardowe i domyślne css) na mojej stronie jsp, gdzie domyślny będzie zawsze obecny, a niestandardowe css mogą być ładowane dla różnych użytkowników.

W scenariuszach, w których nie ma pliku niestandardowego, pojawia się błąd "Nie znaleziono pliku" (404) w konsoli przeglądarki. Czy istnieje sposób (lub znacznik jstl), aby sprawdzić, czy niestandardowy plik istnieje, zanim uwzględnię go w jsp?

+1

Zaznacz to, wystarczająco blisko: http: // stackoverflow.com/questions/2624657/how-can-you-check-if-a-file-exists-before-including-importing-it-in-jsp –

+0

catch block nie rozwiąże mojego problemu, ponieważ korzystam z html 'link' znacznik do dołączenia pliku css. czy mogę dołączyć css przy użyciu jstl? – S4beR

Odpowiedz

7

Nie można tego łatwo zrobić bezpośrednio za pomocą JSTL. Proponuję użyć klasy, aby sprawdzić, czy plik istnieje i zwrócić wartość boolowską. To pozwoliłoby ci użyć instrukcji JSTL wybrać lub jeśli chcesz osiągnąć swój cel.

Korzystanie z pliku klasy można podejść na wiele sposobów. Prawdopodobnie napiszę klasę narzędziową i utworzę niestandardowy taglib, który można wywołać za pomocą EL/JSTL, aby wykonać zadanie. Przykład takiego podejścia można znaleźć tutaj: How to call a static method in JSP/EL?

Poniżej znajduje się przykład klasy narzędziowej do plików, której używałem w przeszłości do sprawdzania plików w 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]; 
    } 
} 

Następnie wewnątrz /WEB-INF/functions.tld, utworzyć definicję:

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

in JSP:

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

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

pozwól mi spróbować. dzięki za pomoc – S4beR

+0

wykonałem własną implementację zgodnie z opisem. Dzięki – S4beR