2011-02-02 10 views
13

मान लीजिए मैं:मैं वसंत एमवीसी में एक ही @RequestMapping में पैरामीटर के लिए अलग-अलग मानों को कैसे मैप करूं?

@RequestMapping(params = "action=nuovoprodotto")  
    public ModelAndView nuovoProdotto(
      @RequestParam(value = "page", required = false, defaultValue = "-1") int page, 
      @RequestParam(value = "action") String action, 
      @ModelAttribute Prodotto prod, HttpSession session) 
      throws Exception { 

यह संभव है "कार्रवाई" पैरामीटर के दो या तीन मूल्यों पसंद करने के लिए इस अनुरोध को मैप करने के लिए?

मैं

@RequestMapping(params = "action=nuovoprodotto, action=salvaprodotto") 

या

@RequestMapping(params = "action=nuovoprodotto|salvaprodotto") 

की तरह कई मायनों कोशिश की, लेकिन वे काम नहीं करते ... अगर मैं नहीं कर सकता क्या समाधान, हर एक के लिए एक हैंडलर लेखन besided हैं पैरामीटर मूल्य संयोजन?

उत्तर

19

इस प्रयास करें:

@RequestMapping(params = {"action=nuovoprodotto","action=salvaprodotto"}) 

params विशेषता प्रकार String[] की वास्तव में है, लेकिन एनोटेशन आप एक एकल तत्व String[] के स्थान पर एक String बारे में जाने, इसलिए इन दोनों बराबर हैं:

@RequestMapping(params = {"action=nuovoprodotto"}) 

और

@RequestMapping(params = "action=nuovoprodotto") 

संदर्भ:


अद्यतन: मेरा बुरा, जैसा कि आप अनुभाग Advanced @RequestMapping options में पढ़ सकते हैं, कई पैरामीटर का उपयोग कर जोड़ दिया जाता है और, नहीं या, तो यह नहीं कर सकते ऊपर निर्दिष्ट के रूप में काम करते हैं।

तो मैं कहेंगे कि आप क्या करना है लगभग एक ही हस्ताक्षर के साथ एक उपनाम विधि बनाने है:

@RequestMapping(params = "action=nuovoprodotto")  
public ModelAndView nuovoProdotto(
     @RequestParam(value = "page", required = false, defaultValue = "-1") int page, 
     @RequestParam(value = "action") String action, 
     @ModelAttribute Prodotto prod, HttpSession session) 
     throws Exception { 
     // some stuff here 
} 

@RequestMapping(params = "action=salvaprodotto")  
public ModelAndView salvaProdotto(
     @RequestParam(value = "page", required = false, defaultValue = "-1") int page, 
     @RequestParam(value = "action") String action, 
     @ModelAttribute Prodotto prod, HttpSession session) 
     throws Exception { 

     return nuovoProdotto(page, action, prod, session); 
} 
+0

@ gotch4 दाएं, मेरा अपडेट –

+0

देखें जो समाधान आपने प्रस्तावित किया है वह स्पष्ट है जिसे मैं उपयोग कर रहा हूं। वैसे भी आपके प्रयास के लिए धन्यवाद :) – gotch4

3

नहीं कि समर्थित नहीं है।

एक तरीका यह है कि काम हो जाएगा करता है हो सकता है "अधिभावी" विधि Unforunaly की boolean checkParameters(String[] params, HttpServletRequest request)ServletAnnotationMappingUtils

यह एक स्थिर विधि है!

  • AnnotationMethodHandler.RequestMappingInfo `बूलियन मैचों (HttpServletRequest अनुरोध)
  • DefaultAnnotationHandlerMappingvoid validateMapping(RequestMapping mapping, HttpServletRequest request)

लेकिन फिर कोई भाग्य:: तो आप जहां यह शुरू हो जाती है से दो methodes ओवरराइड करने के लिए की जरूरत है AnnotationMethodHandler.RequestMappingInfo एक आंतरिक वर्ग है और यह सीधे AnnotationMethodHandler के किसी अन्य आंतरिक वर्ग (ServletHandlerMethodResolver) में बनाया गया है। लेकिन अगर आप इसे भी ओवरराइड करते हैं, तो यह संभव काम कर सकता है। (कम से कम आपको पूरे एनोटेशनMethodHandlerAdapter क्लास की प्रतिलिपि बनाना होगा और कोड की कुछ पंक्ति बदलनी होगी।)

तो संक्षेप में: सबसे आसान तरीका अभी भी दो हैंडलर विधियों के लिए है।

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