2012-11-13 27 views
5

में डालने से पहले टाइल्स विशेषता का अस्तित्व कैसे जांचें I struts2 एप्लिकेशन में टाइल्स का उपयोग कर रहा हूं। बेस लेआउट को परिभाषित करते समय मैंने एक विशेषता "स्क्रिप्टफाइल" परिभाषित की है।पेज

<definition name="baseLayout" template="/application/base-layout.jsp" > 
    ... 
</definition> 

<definition name="custom.tiles" extends="baseLayout"> 
    <put-attribute name="scriptFile" value="js/custom-script.js"></put-attribute> 
</definition> 

डेवलपर टाइल्स परिभाषा फ़ाइल में "स्क्रिप्टफ़ाइल" प्रदान करता है, "tiles.xml", इस स्क्रिप्ट फ़ाइल निम्न पंक्ति का उपयोग कर शामिल किया जाना चाहिए

<script language="javascript" src="<tiles:insertAttribute name="scriptFile"></tiles:insertAttribute>"></script> 

लेकिन अगर स्क्रिप्टफ़ाइल विशेषता परिभाषित नहीं है, इस लाइन छोड़ दिया जाना चाहिए।

मैं टाइल्स में "स्क्रिप्टफाइल" विशेषता के अस्तित्व की जांच कैसे कर सकता हूं। क्या इस काम को करने का कोई बेहतर तरीका है?

+0

आप किस टाइल का उपयोग कर रहे हैं? स्क्रिप्टफ़ाइल विशेषता कहां से आती है? क्या यह कुछ ऐसा है जो रन टाइम पर गतिशील है?यदि यह केवल टाइल्स निश्चित है, तो आपको कई "हेड" टेम्पलेट्स बनाना चाहिए, और उचित हेडर शामिल करना चाहिए, यदि आप एक ऐसे सिर का उपयोग करते हैं जिसके लिए आपको स्क्रिप्टफाइल प्रदान करने की आवश्यकता होती है तो आपको एक स्क्रिप्ट फ़ाइल प्रदान करने की आवश्यकता होगी। यदि स्ट्रेट्स 2 एक्शन के लिए एक आईडी को अपनी नौकरी करने की आवश्यकता होती है तो आप एक आईडी नहीं भेज सकते हैं और इसे काम करने की उम्मीद नहीं कर सकते हैं (टाइल्स के लिए भी)। यदि यह गतिशील सामग्री है तो अन्य संभावनाएं हैं। – Quaternion

+0

संस्करण = टाइल्स 2.0.6। विशेषता tiles.xml से आता है, और यह गतिशील नहीं है। लेआउट में पृष्ठ शीर्षक, मेनू, सामग्री और पाद लेख शामिल हैं। प्रत्येक पृष्ठ के लिए केवल सामग्री ही बदली जाएगी। यदि सामग्रियों को किसी भी जावास्क्रिप्ट की आवश्यकता होती है, तो डेवलपर जेएस फ़ाइल प्रदान करेगा और इसे tiles.xml में परिभाषित करेगा। यह जावास्क्रिप्ट फ़ाइल तब पेज हेडर में शामिल की जाएगी। –

उत्तर

0

बस ignore विशेषता

<script language="javascript" src="<tiles:insertAttribute name='scriptFile' ignore='true'/>"></script> 

उपयोग करें और अपनी परिभाषा scriptFile न रखें।

अद्यतन

कैसे तो लेआउट में getAsString टैग का उपयोग कर के बारे में

<tiles:getAsString name="jscript" ignore="true" /> 

और परिभाषा में पूरी डाल स्क्रिप्ट टैग फरार हो गए।

<put-attribute name="jscript" value="&lt;script src='js/custom-script.js' type='text/javascript'>&lt;/script>" /> 
+0

विशेषता को अनदेखा करें यदि यह उपस्थित नहीं है तो विशेषता के मान को रखकर छोड़ देता है। इस मामले में यह '। –

+0

मेरा जवाब अपडेट किया गया। –

+0

यह काम कर सकता है लेकिन मुझे लगता है कि फ़ाइल नाम को परिभाषित करने के बजाय प्रत्येक बार स्ट्रिंग के रूप में पूर्ण टैग प्रदान करना एक अच्छा विचार नहीं है। यदि फ़ाइल का नाम दिया गया है, तो टेम्पलेट द्वारा आसपास के स्क्रिप्ट टैग को रखा जाना चाहिए प्रयास और त्रुटि की संभावनाओं को कम कर देता है। –

3

मैंने कोशिश की

<t:useAttribute name="scriptFile" id="script" classname="java.util.List" ignore="true"/> 
<% 
    if(script != null) { 
     ... include script 
    } 
%> 

JSTL भी यहां इस्तेमाल किया जा सकता है।

+0

http://mail-archives.apache.org/mod_mbox/struts-user/200304.mbox/%[email protected]%3E –

1

मैं डिफ़ॉल्ट वैल्यू विशेषता का उपयोग कर एक समान समस्या को हल करने में सक्षम था। इस प्रकार, यदि विशेषता मौजूद नहीं है तो आपको अपवाद नहीं मिलेगा। इस मामले में, अगर पेज तो टाइल्स टेम्पलेट सिर्फ एक खाली स्ट्रिंग

जोड़ देगा अतिरिक्त जावास्क्रिप्ट को शामिल करने की आवश्यकता नहीं JSP

<tiles:insertDefinition name="portalTemplate"> 

    <tiles:putAttribute name="body"> 
     <h1>Body</h1> 
    </tiles:putAttribute> 

    <tiles:putAttribute name="js"> 
     <script src="script.js"></script> 
    </tiles:putAttribute> 
</tiles:insertDefinition> 

टाइलें खाका JSP

<html> 
<body> 
    <tiles:insertAttribute name="body"/> 
    <script src="/public/libs/jquery/jquery-2.1.1.min.js"></script> 

    <!-- Include extra JS after JQuery --> 
    <tiles:insertAttribute name="js" defaultValue=""/> 
</body> 
</html> 
0

मैंने उस समस्या को हल करने के लिए निम्न कोड का उपयोग किया (केवल टैग विवरण से प्राप्त जानकारी के अनुसार: अनदेखा करें - यदि यह विशेषता सत्य पर सेट की गई है, और विशेषता नाम से निर्दिष्ट नहीं है, बस कुछ भी लिखने के बिना वापस आते हैं। डिफ़ॉल्ट मान गलत है, जो रनटाइम अपवाद फेंकने का कारण बनता है।):

<tiles:importAttribute name="stylesheets" ignore="${true}"/> 

पीएस सावधान रहें, केवल "सत्य" मान के $ {true} intead का उपयोग करें।