2013-05-28 1 views
6

Ich versuche, eine Anwendung mit Standard-CSS zu entwerfen. Ich will eine Wahl haben, wo ich neue css (Gewohnheit) Datei einschließen kann, die die Standardhaut ändert.enthalten CSS-Datei in JSP nur, wenn es existiert

Ich kann dies erreichen, indem Sie sowohl (benutzerdefinierte und Standard-CSS) auf meiner JSP-Seite beziehen, wo Standard immer vorhanden sein wird und benutzerdefinierte CSS für verschiedene Benutzer geladen werden kann.

In Szenarien, wo benutzerdefinierte Datei nicht vorhanden ist, erhalte ich "Datei nicht gefunden" (404) Fehler in der Browser-Konsole. Gibt es einen Weg (oder JSTL-Tag) zu überprüfen, ob benutzerdefinierte Datei existiert, bevor ich es in JSP aufnehmen?

+1

Überprüfen Sie dieses, nahe genug: http: // stackoverflow.com/questions/2624657/how-can-you-check-if-a-file-exists-before-including-importing-it-in-jsp –

+0

Catch-Block wird nicht mein Problem lösen, da ich html 'Link' verwende Tag zum Einschließen der CSS-Datei. kann ich CSS mit jstl aufnehmen? – S4beR

Antwort

7

Dies ist nicht einfach mit JSTL direkt getan. Ich würde vorschlagen, dass Sie eine Klasse verwenden, um zu überprüfen, ob die Datei existiert und einen booleschen Wert zurückgibt. Auf diese Weise können Sie eine JSTL-Anweisung choose oder if verwenden, um Ihr Ziel zu erreichen.

Die Verwendung einer Klassendatei kann auf verschiedene Arten angefahren werden. Ich würde wahrscheinlich eine Dienstprogrammklasse schreiben und eine benutzerdefinierte Taglib erstellen, die mit EL/JSTL aufgerufen werden kann, um die Aufgabe zu erledigen. Sie können ein Beispiel für diese Art von Ansatz hier sehen: How to call a static method in JSP/EL?

Das folgende Beispiel zeigt eine Dateidienstklasse, die ich in der Vergangenheit verwendet habe, um nach Dateien in Tomcat zu suchen.

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]; 
    } 
} 

Dann innen /WEB-INF/functions.tld, erstellen Sie Ihre Definition:

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

Die in der JSP:

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

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

lass mich das versuchen. Danke für die Hilfe – S4beR

+0

Ich habe meine eigene Implementierung wie Sie beschrieben. Vielen Dank – S4beR