2013-05-28 6 views
6

मौजूद है, तो मैं डिफ़ॉल्ट सीएसएस के साथ एक एप्लिकेशन को डिज़ाइन करने की कोशिश कर रहा हूं। मैं एक विकल्प चाहता हूं जहां मैं नई सीएसएस (कस्टम) फ़ाइल शामिल कर सकता हूं जो डिफ़ॉल्ट त्वचा को बदलता है।में केवल जेएसपी में सीएसएस फ़ाइल शामिल है यदि यह

मैं अपने जेएसपी पेज में दोनों (कस्टम और डिफ़ॉल्ट सीएसएस) को संदर्भित करके इसे स्वीकार कर सकता हूं जहां डिफ़ॉल्ट हमेशा मौजूद रहेगा और विभिन्न उपयोगकर्ताओं के लिए कस्टम सीएसएस लोड किया जा सकता है।

उन दृश्यों में जहां कस्टम फ़ाइल मौजूद नहीं है, मुझे ब्राउज़र कंसोल में 'फ़ाइल नहीं मिली' (404) त्रुटि प्राप्त होती है। क्या यह एक तरीका है (या jstl टैग) यह जांचने के लिए कि कस्टम फ़ाइल मौजूद है इससे पहले कि मैं इसे jsp में शामिल करता हूं?

+1

इस चेक, इतने पास: http: // stackoverflow.com/questions/2624657/how-can-you-check-if-a-file-exists-before-including-importing-it-in-jsp –

+0

कैच ब्लॉक मेरे मुद्दे को हल नहीं करेगा क्योंकि मैं HTML 'लिंक' का उपयोग कर रहा हूं सीएसएस फ़ाइल को शामिल करने के लिए टैग करें। क्या मैं jstl का उपयोग कर सीएसएस शामिल कर सकता हूं? – S4beR

उत्तर

7

यह आसानी से जेएसटीएल के साथ आसानी से नहीं किया जाता है। मैं सुझाव दूंगा कि आप यह जांचने के लिए कक्षा का उपयोग करें कि फ़ाइल मौजूद है या नहीं और बूलियन मान लौटाएं। यह आपको एक जेएसटीएल चुनने या अपने लक्ष्य को पूरा करने के लिए कथन का उपयोग करने की अनुमति देगा।

कक्षा फ़ाइल का उपयोग करके कई तरीकों से संपर्क किया जा सकता है। मैं शायद एक उपयोगिता वर्ग लिखूंगा और एक कस्टम टैगलिब तैयार करूंगा जिसे नौकरी करने के लिए ईएल/जेएसटीएल का उपयोग करके बुलाया जा सकता है। आप यहां इस प्रकार के दृष्टिकोण का एक उदाहरण देख सकते हैं: How to call a static method in JSP/EL?

निम्नलिखित फ़ाइल उपयोगिता वर्ग का एक उदाहरण है जिसे मैंने अतीत में टॉमकैट में फ़ाइलों की जांच करने के लिए उपयोग किया है।

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

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 prefix="udf" uri="http://www.your-domain.com/taglib" %> 

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

मुझे इसे आज़माएं। मदद के लिए धन्यवाद – S4beR

+0

मैंने आपके स्वयं के कार्यान्वयन के अनुसार वर्णन किया है। धन्यवाद – S4beR

संबंधित मुद्दे