2017-10-11 26 views
7

मेरे पास वेसमलीफ के साथ वसंत-बूट एप्लिकेशन है। मैं बार-बार पेज अद्यतन करते हैं, और एक ही पृष्ठ पर यह रीडायरेक्ट करने, इसलिए मैं उम्मीद करते हैं कि पृष्ठ के तत्वों को अपडेट कर दिया:स्प्रिंग-बूट: रीडायरेक्ट और रीफ्रेश मॉडल और पेज

@GetMapping("/suggested-events/vote/{eventId}")   
public String voteForEvents(Model model, 
          @PathVariable("eventId") Long eventId, 
          @RequestParam(value = "message", required = false) String message) { 
    log.info("The message is: "+message); 
    SuggestedEvent event = suggestedEventService.findSuggestedEventById(eventId); 
    ArrayList<SuggestedEvent> events = suggestedEventService.findSuggestedEventsByArea(event.getArea()); 
    model.addAttribute("mainEvent",event); 
    model.addAttribute("events",events); 
    model.addAttribute("message",message); 

    return "/suggested-event/vote"; 
} 

और जब एक बटन ध्यान में रखते हुए धक्का दे दिया हो यह नीचे पोस्ट विधि से चलाता है:

@PostMapping("/suggested-events/vote") 
public String voteForASuggestedEvent(RedirectAttributes redirectAttributes){ 
    log.info("You have made a vote"); 
    redirectAttributes.addAttribute("message", "Success"); 

    return "redirect:/suggested-events/vote/1"; 
} 

यह दूसरा नियंत्रक विधि, प्रदर्शन करती एक ऑपरेशन एक एक message बनाता है, और पहली विधि के लिए यह पुनर्निर्देश। इसलिए, यह सफलतापूर्वक पहली विधि के लिए पुनः निर्देशित और यह

log.info("The message is: "+message); 

लॉग लेकिन यह मेरी पृष्ठ को रीफ्रेश नहीं है, और मैं मॉडल के रूप में संदेश नहीं मिलता है?

जब मैं पहली विधि को अनुप्रेषित, मैं उम्मीद यह मेरे मॉडल के लिए message जोड़ता है:

model.addAttribute("message",message); 

लेकिन यह मेरा पेज को जोड़ा नहीं है

+1

इस उत्तर को देखो और मुझे लगता है कि यह आपकी मदद करेगा।[स्प्रिंग रीडायरेक्ट एट्रिब्यूट्स: addAttribute बनाम addFlashAttribute] (https://stackoverflow.com/a/30560440/5429215) – mrtasln

+1

@ user5363938 यह कोड मेरे लिए ठीक काम करता है। क्या आप अपना फॉर्म दिखा सकते हैं? – varren

उत्तर

0

वहाँ वसंत में पेज रीडायरेक्ट करने के लिए कई तरीके हैं , लेकिन यह सुनिश्चित करें कि मॉडल संदेश को बंद कर देता है, जो फ्रंटएंड पर सही ढंग से गुजर रहा है या किसी अन्य हैंडलर को पैरामीटर की तरह गुजर रहा है, तो आप यह दस्तावेज़ देख सकते हैं: http://javainsimpleway.com/spring-mvc-redirecting-model-attributes-from-one-controller-to-other-controller/, उम्मीद है कि यह उपयोगी है !!

0

और जब एक बटन ध्यान में रखते हुए धक्का दे दिया हो यह नीचे पोस्ट विधि से चलाता है:

ऐसा लगता है कि यह ट्रिगर की तरह AJAX उपयोग कर रहा है, कोई फ़ॉर्म सबमिट करने के बजाय। ऐसा करने से आपके द्वारा वर्णित लक्षणों का मिलान होगा।

यदि आप POST/suggested-events/vote AJAX का उपयोग कर, सर्वर 302 लौटाएगा, और ब्राउज़र इसका अनुसरण करेगा। हालांकि, उस 302 के लिए प्रतिक्रिया अभी भी एक AJAX कॉल का परिणाम है। आपके पास सफलता की कॉलबैक में इसका उपयोग है, लेकिन ब्राउजर आपके लिए इसे प्रस्तुत नहीं करेगा।

लेकिन यह मेरा पेज

रीफ्रेश नहीं होता है एक 302 फिर से प्रस्तुत करने के लिए अपने पृष्ठ का कारण नहीं है, यह भी पता चलता है कि आप AJAX का उपयोग कर रहे हैं।

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

यह आपके vote.html में निम्नलिखित दो बटन का उपयोग करके सत्यापित किया जा सकता है:

<form action="http://localhost:8080/suggested-events/vote" method="POST"> 
    <input type="submit" text="Submit" /> 
    </form> 

    <button onclick="postmessage();" >Button</button> 

    <script> 
    function postmessage() { 
     $.ajax({ 
      method: 'POST', 
      data: {}, 
      url: 'http://localhost:8080/suggested-events/vote' 
     }); 
    } 
    </script> 

पहला बटन अपेक्षा के अनुरूप काम करेंगे, और दूसरा बटन लक्षण आपके द्वारा बताई गई मेल खाता है।

यदि आप पहले से ही एक फॉर्म का उपयोग कर रहे हैं, तो कृपया इसके साथ प्रश्न अपडेट करें (या बेहतर अभी तक, संपूर्ण थाइमेलीफ टेम्पलेट)।

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