2010-01-19 15 views
7

मुझे लगता है कि मैं वसंत एमवीसी में सत्र एनोटेशन के बारे में थोड़ा उलझन में हूं।स्प्रिंग 3 एमवीसी सत्र में डिफ़ॉल्ट ऑब्जेक्ट्स सत्र समाप्त होने पर

मैं इस तरह कोड है (2 कदम के रूप में नमूना, चरण 1 उपयोगकर्ता डेटा, चरण 2 पता)

@SessionAttributes({"user", "address"}) 
public class UserFormController { 

    @RequestMapping(method = RequestMethod.GET) 
    public ModelAndView show(ModelAndView mv){ 
     mv.addObject(new User()); 
     mv.addObject(new Address()); 
     mv.setViewName("user_add_page"); 
     return mv; 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String processForm(User user, BindingResult result){ 
     new UserValidator().validate(user, result); 
     if(result.hasErrors()){ 
      return "user_add_page"; 
     }else{ 
      return "redirect:/user_form/user_add_address"; 
     } 

// ......... 
} 

अब के बाद मेरे सत्र समाप्त हो मैं त्रुटि मिलती है अगर मैं पृष्ठ सबमिट

ऑर्ग .springframework.web.HttpSessionRequiredException: सत्र विशेषता 'उपयोगकर्ता की आवश्यकता - सत्र में नहीं मिला

मैं इसे कैसे संभाल सकता हूं? मैं 2 विकल्प

  1. मैं खाली वस्तुओं को बनाने के अगर सत्र में लापता हैं और स्वीकार करते
  2. मैं आगे वापस कुछ संदेश

इम साथ उपयोगकर्ता फार्म के लिए अभी भी प्रस्तुत सीखने वसंत के प्रारंभिक चरण में करना चाहते हैं क्षमा करें अगर यह कुछ बहुत स्पष्ट है, तो मैं इसे देख नहीं सकता।

ps। क्या वसंत एमवीसी में इस तरह के फॉर्म को हल करने का भी अच्छा तरीका है या आप विभिन्न दृष्टिकोण को फिर से तैयार करेंगे?

उत्तर

4

1.i खाली वस्तुओं को बनाने के अगर सत्र में लापता हैं और स्वीकार करते डिफ़ॉल्ट मान

2.i आगे वापस उपयोगकर्ता प्रपत्र के साथ उपलब्ध कराने के लिए @ModelAttribute("user") -annotated विधि प्रस्तुत

उपयोग कुछ संदेश

उपयोग @ExceptionHandler(HttpSessionRequiredException.class) -annotated विधि

+0

इसके आगे 'processForm' विधि' में 'उपयोगकर्ता' विशेषता में '@ ModelAttribute' जोड़ें। –

0

Spring 3.0 reference manual के अनुसार, ऐसा लगता है कि @SessionAttributes का उपयोग उस प्रकार पर किया जाना है जिसे आप "कमांड" या फॉर्म-बैकिंग ऑब्जेक्ट जैसे सत्र में पारदर्शी रूप से संग्रहीत करना चाहते हैं। मुझे नहीं लगता कि आप सत्र में नियंत्रक को स्टोर करना चाहते हैं।

+0

hymmm ... नहीं, मैं सत्र में नियंत्रक स्टोर करने के लिए मतलब नहीं था। मेरी समस्या यह है कि एक बार आपका सत्र आपके उपयोगकर्ता और पता ऑब्जेक्ट्स (नियमित डेटा होल्डिंग बीन्स) समाप्त हो जाने के बाद शून्य हो जाता है। मैं चारों ओर यह \t @ExceptionHandler (HttpSessionRequiredException.class) के साथ मिल गया \t सार्वजनिक ModelAndView handleException() { \t \t ModelAndView mv = नए ModelAndView ("अनुप्रेषित:/user_form"); \t \t mv.addObject (नया उपयोगकर्ता()); \t \t एमवी।addObject (नया पता()); \t \t वापसी एमवी; \t} लेकिन मेरे मन में यह बिल्कुल ठीक नहीं था, मैं कुछ क्लीनर समाधान – Art79

+0

'@ सत्र एट्रिब्यूट्स 'की उम्मीद कर रहा था, यह निर्धारित करने के लिए कि आप कौन सी ऑब्जेक्ट्स को सत्र में स्टोर करना चाहते हैं। यह इंगित नहीं करता है कि नियंत्रक सत्रबद्ध है (इसके लिए एक '@ स्कोप' एनोटेशन है)। –

1

प्रयास करें यहाँ की जाँच करने के:

http://forum.springsource.org/showthread.php?t=63001&highlight=HttpSessionRequiredException

@Controller 
@RequestMapping(value="/simple_form") 
@SessionAttributes("command") 
public class ChangeLoginController { 

    @ModelAttribute("command") 
    public MyCommand createCommand() { 
    return new MyCommand(); 
    } 

    @RequestMapping(method = RequestMethod.GET) 
    public String get() {  
     return "form_view"; 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String post(@ModelAttribute("command") MyCommand command) { 
     doSomething(command); // execute business logic 
     return "form_view"; 
    } 
} 
संबंधित मुद्दे