2010-07-29 12 views
6

के लिए उपयोग करने के लिए किस नेविगेशन रणनीति का उपयोग करें, मैं एक स्प्रिंग एमवीसी 3.0 एप्लिकेशन शुरू कर रहा हूं और नियंत्रकों और विचारों को अच्छी तरह से काम कर रहा हूं, मुझे अब एक चीज करने की आवश्यकता है जो नेविगेशन काम कर रहा है। तो मेरे पास प्रत्येक दृश्य के लिए, यह जानने की जरूरत है कि दृश्य के "मेनू" भाग में कौन सा आइटम हाइलाइट करने के लिए और उस दृश्य में मेनू विकल्प उपलब्ध हैं।कृपया अनुशंसा करें कि स्प्रिंग एमवीसी 3.0

एक बात जो मैंने सोचा था, नियंत्रक को यह देखने के लिए कहां था कि यह कहां है, लेकिन यह बाध्यकारी दृश्य तर्क नियंत्रक में है। मेरे विचार मेनू में स्वयं शामिल है जिसमें मैं प्रत्येक दृश्य में शामिल हूं।

आपके दृष्टिकोण क्या हैं? मैं टाइल्स का उपयोग करने के बारे में सोच रहा हूं, इस बिंदु पर मैं केवल जेएसपी और जेएसटीएल का उपयोग कर रहा हूं, शायद इससे मदद मिलेगी?

उत्तर

3

मैं एक दृश्य के प्रबंधक के रूप में टाइल्स का उपयोग करने की सलाह देते हैं, और इस तरह एक viewNameTranslator:

<bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"> 
    <property name="separator" value="." /> 
</bean> 

तो इस तरह से आप शून्य लौटने नियंत्रक वर्ग पर specifing दृश्य नाम से बच सकते हैं।

टाइल def.xml पर बाद में आप इस तरह के एक दृश्य किसी चीज़ को परिभाषित:

<definition name="newView" extends="baseView"> 
    <put name="menu" value="/pages/menu/menu.jsp?highlightedView=newView" /> 
    <put name="body" value="/pages/newStuff/content.jsp" /> 
</definition> 

इस तरह menu.jsp आपके लिए आवश्यक जानकारी के साथ एक aditional पैरामीटर highlightedView प्राप्त करता है।-

उम्मीद है कि यह मदद करता है।

+0

यह एक अच्छा समाधान ejmarino है, धन्यवाद। मैं पहले से ही टाइल्स का उपयोग कर रहा हूं इसलिए यह करना बहुत आसान था। इसका मतलब यह है कि मेरे menu.jsp में मुझे यह निर्धारित करने के लिए बहुत सारे '' ब्लॉक रखना होगा कि कक्षा को 'ली' पर लागू किया जाना चाहिए, हालांकि इसे जावास्क्रिप्ट के एक छोटे टुकड़े के साथ सरलीकृत किया जा सकता है। फिर से धन्यवाद, महान जवाब। –

1

ऐसा लगता है कि यह प्रश्न टम्बलवेड्स देख रहा है। मैंने समस्या को बहुत कुछ दिया है, लेकिन मुझे कोई व्यवहार्य समाधान नहीं मिला है, इसलिए मुझे लगता है कि मैं अपने विचार के कार्यान्वयन को लिखूंगा, मैं इसे आपकी टिप्पणियों के लिए पोस्ट कर रहा हूं, मुझे बताएं कि क्या आपको लगता है कि यह * * टी विचार, अगर आपको लगता है कि यह योग्य है, तो मैं परिणाम कोड पोस्ट करूंगा।

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

तो सबसे पहले, मेरा मेनू निम्न जैसा दिख सकता है, इसे सुरक्षा भूमिकाओं के लिए प्रावधान मिला है, लेकिन यह दो संस्करण SimpleMenuServlet और SpringSecurityMenuServlet या कुछ समान बनाकर "अतिरिक्त जोड़ा गया" के रूप में कुछ हो सकता है।

<menus> 
    <menu id='home' path='/home'> 
     <paths> 
     <match pattern='/home'/> 
     </paths> 
    </menu> 
    <menu id='administration' path='/admin'> 
     <allowed-roles> 
     <role name='admin'/> 
     </allowed-roles> 
     <paths> 
     <match pattern='/admin/**'/> 
     </paths> 
    </menu> 
    <menu id='reports' path='/reports'> 
     <allowed-roles> 
     <role name='user'/> 
     <role name='admin'/> 
     </allowed-roles> 
     <paths> 
     <match pattern='/reports/**'/> 
     <match pattern='/item/*/reports/**'/> 
     </paths> 
    <menu> 
</menus> 

नोट: वहाँ मेनू के रूप में इस संसाधन बंडलों से लौटाया जा करने का इरादा है पर कोई "पाठ" attibute है।

रेंडरिंग अब सर्वलेट से useBean के साथ या कस्टम टैग लाइब्रेरी के माध्यम से किया जा सकता है, जो मुझे नहीं लगता कि वास्तव में आवश्यक है, लेकिन कौन जानता है।

<ul id="main-menu"> 
<c:forEach var="item" items="${menu-items}"> 
    <c:choose> 
     <c:when test="${item.selected && !found}"> 
     <c:set var="menuClass" value="selected"/> 
     <c:set var="found" value="selected"/> 
     </c:when> 
     <c:otherwise> 
     <c:set var="menuClass" value=""/> 
     </c:otherwise> 
    </c:choose> 
    <li id="${item.id}" class="${menuClass}"> 
     <!-- Using resource bundle to get text, this could be the 
      servlet/menu item that's responsible to get this instead --> 
     <a href="${item.path}"><fmt:message key="menu-${item.id}" /></a> 
    </li> 
</c:forEach> 
</ul> 

तो अब मेरे तर्क है कि मैं सर्वलेट और मेनू सेम, ऊपर जार सकता है लोड हो रहा है मेनू फ़ाइलों को web.xml के माध्यम से इसे नियंत्रित सम्मान के साथ और स्टार्टअप आदि, तो किसी भी दृश्य से प्रस्तुत करना है।

जैसा कि आप देख सकते हैं कि मेन्यू का कोर पथ पैटर्न द्वारा काम करता है यह निर्धारित करता है कि आप किस क्षेत्र में हैं, यह चेहरे की तरह लिंकिंग पेज को संभाल नहीं पाता है, लेकिन यह वही नहीं है जो मैं चाहता हूं, मैं देख रहा हूं एक स्थैतिक, विन्यास योग्य, रखरखाव मेनू, कि न तो मेरे विचार और न ही मेरे नियंत्रकों के पास ज्ञान का एक बड़ा सौदा होना चाहिए।

+0

तो नियंत्रक कैसा दिखता है? हमारे मेनू को वास्तव में मौजूदा क्लाइंट उपपृष्ठ के लिंक की आवश्यकता है और यूआरएल में क्लाइंट आईडी है। यह केवल तभी उपलब्ध होता है जब क्लाइंट मॉड्यूल के भीतर और एक विशिष्ट क्लाइंट लोड हो जाता है। – dukethrash

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