2013-05-28 3 views
6

Je suis en train de concevoir une application avec css par défaut. Je veux avoir une option où je peux inclure un nouveau fichier CSS (personnalisé) qui change l'habillage par défaut.inclure le fichier css dans jsp seulement s'il existe

Je peux y parvenir en faisant référence à la fois (custom et default css) dans ma page jsp où la valeur par défaut sera toujours présente et css personnalisé peut être chargé pour différents utilisateurs.

Dans les situations où le fichier personnalisé n'est pas présent, l'erreur 'Fichier non trouvé' (404) s'affiche dans la console du navigateur. Existe-t-il un moyen (ou une balise jstl) de vérifier si le fichier personnalisé existe avant de l'inclure dans jsp?

+1

vérifier, assez proche: http: // stackoverflow.com/questions/2624657/how-can-you-check-if-a-file-exists-before-including-importing-it-in-jsp –

+0

catch block ne va pas résoudre mon problème car j'utilise html 'link' tag pour inclure le fichier css. puis-je inclure css en utilisant jstl? – S4beR

Répondre

7

Ce n'est pas facile avec JSTL directement. Je vous suggère d'utiliser une classe pour vérifier si le fichier existe et retourner une valeur booléenne. Cela vous permet d'utiliser une instruction JSTL choose ou if pour atteindre votre objectif.

L'utilisation d'un fichier de classe peut être abordée de plusieurs façons. J'écrirais probablement une classe utilitaire et créerais un taglib personnalisé qui pourrait être appelé en utilisant EL/JSTL pour faire le travail. Vous pouvez voir un exemple de ce type d'approche ici: How to call a static method in JSP/EL?

Voici un exemple de classe d'utilitaire de fichier que j'ai utilisé par le passé pour rechercher des fichiers dans 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]; 
    } 
} 

Puis à l'intérieur /WEB-INF/functions.tld, créez votre définition:

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

La dans la JSP:

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

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

laissez-moi essayer ça. merci pour l'aide – S4beR

+0

J'ai fait ma propre mise en œuvre comme vous l'avez décrit. Merci – S4beR

Questions connexes