2011-05-18 18 views
5

मेरे पास लाइब्रेरी विधि Common.addTheUsualStuffToTheModel(model) है जो मेरे एप में प्रत्येक नियंत्रक विधि में मॉडल पर विभिन्न विशेषताओं को जोड़ने की आवश्यकता है।पुनरावृत्ति वसंत नियंत्रक कोड निष्पादित करने का सबसे अच्छा तरीका?

@RequestMapping(value = "/everypath", method = RequestMethod.GET) 
public final String everyHandler(ModelMap model) 
{ 
    model = Common.addTheUsualStuffToTheModel(model); 
    return "everyPage"; 
} 

अब तक मैं हर हैंडलर विधि करने के लिए यह एक ही पंक्ति जोड़कर किया गया है:

model = Common.addTheUsualStuffToTheModel(model); 

लेकिन मुझे डर है कि इस के सिद्धांत के अनुरूप नहीं है हूँ "एक बार लिखते हैं, हर जगह का उपयोग करें"।

मैं प्रत्येक हैंडलर में इस कोड को दोहराने से कैसे बचूं?

उत्तर

7

आपको लगता है कि

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

आप जरूरी मॉडल की जरूरत नहीं है से पहले आबादी होने के लिए नियंत्रक विधि, postHandle विधि में आप ModelAndView वस्तु मिलता है।

+0

अच्छा, ऐसा लगता है कि पोस्ट हैंडलरेंडर विधि के साथ आप मॉडल को पकड़ सकते हैं और दृश्य प्रस्तुत करने से पहले सामान जोड़ सकते हैं, इसलिए आपको इसे एक अनुरोध विशेषता के रूप में जोड़ना नहीं होगा। – digitaljoel

+0

क्षमा करें, मैंने गलत लिंक दिया है - यह 'सर्वलेट' होना चाहिए, न कि 'पोर्टलेट'। सर्वलेट में केवल 3 विधियां हैं, जहां मॉडल केवल पोस्ट हैंडल विधि में उपलब्ध है। – Bozho

+0

@ डिजीटलजोएल यूप, ने कहा। – Bozho

0

@ModelAttribute एनोटेटेड संदर्भ डेटा प्रदाता विधियों को निर्दिष्ट करने के बारे में क्या। यदि आपके सभी नियंत्रकों के लिए बेस क्लास था, और उस बेस क्लास में @ModelAttribute एनोटेटेड विधियां थीं तो मेरा मानना ​​है कि डेटा उन नियंत्रकों द्वारा प्रबंधित किए गए सभी विचारों के लिए मॉडल में उपलब्ध होगा। 15.3.2.8 in the Spring docs पर एक नज़र डालें।

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