2011-01-03 10 views
22

में अनुप्रेषित मैं यह मेरी नियंत्रकवसंत MVC

@RequestMapping(method = RequestMethod.POST) 
public String onSubmit(
    Model model, 
    @ModelAttribute("form") Form form, 
    BindingResult result, HttpServletRequest request) 
    throws IOException, WriteException, BiffException { 

    if (result.hasErrors()) { 
     return "redirect:index.html"; 
    } 

} 

मैं

javax.servlet.ServletException में काम करने के लिए क्यों नहीं प्राप्त कर सकते हैं: नाम साथ दृश्य को हल नहीं कर सका अनुप्रेषित : प्रेषक ने '
org.springframework.web.servlet.DispatcherServlet.render (DispatcherServlet.java:1042)
org.springframework.we' नाम के साथ सर्वलेट में 'index.html b.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:798)
org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:716)
org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet। जावा: 644)
org.springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet.java:560)
javax.servlet.http.HttpServlet.service (HttpServlet.java:637)
javax.servlet.http। HttpServlet.service (HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter (MonitorFilter.java:390)

मुझे यह पहले काम करने के लिए मिला है। अभी क्यों नहीं?

+0

अपवाद occure है, पहले या बाद में पुन: निर्देशन ब्राउज़र को भेज है का प्रयास करें? – Ralph

+0

यह भी इंगित करने लायक है कि रीडायरेक्ट के बाद बाइंडिंग रीसेट जारी नहीं रहेगा। दूसरे शब्दों में यदि आप अपने इनपुट फॉर्म (इस उदाहरण index.html में) पर रीडायरेक्ट करते हैं तो त्रुटियां दिखाई नहीं देगी क्योंकि वे रीडायरेक्ट के कारण खो गए हैं। मुझे हैंडलरइंटरसेप्टर का उपयोग करने से पहले इसे हल करना पड़ा। – garyj

+0

@garyj क्या आपके पास हैंडलर इंटरसेप्टर का उदाहरण है? – blong824

उत्तर

53

इस प्रयास करें, यह काम करना चाहिए अगर आप अपने दृश्य समाधानकर्ता कॉन्फ़िगर किया है ठीक से

return "redirect:/index.html"; 
25

भी ध्यान रखें कि redirect: और forward: उपसर्गों UrlBasedViewResolver द्वारा नियंत्रित किया जाता है, ताकि आप बीच UrlBasedViewResolver कम से कम एक उपवर्ग की आवश्यकता है अपने InternalResourceViewResolver जैसे संकल्प देखें।

+2

स्पष्ट दृश्य रिज़ॉल्यूशन का स्पष्ट रूप से उल्लेख करने के लिए धन्यवाद! :) –

-2

यह अपने गुणों में एक urlBasedViewResolver परिभाषित करना संभव है फ़ाइल:

excel.(class)=fi.utu.seurantaraporttisuodatin.service.Raportti 
index.(class)=org.springframework.web.servlet.view.urlBasedView 
index.viewClass =org.springframework.web.servlet.view.JstlView 
index.prefix = /WEB-INF/jsp/ 
index.suffix =.jsp 
4

कोशिश अपने प्रेषक को-servlet.xml में इसे बदलने के लिए

<!-- Your View Resolver --> 
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> 
    <property name="basenames" value="views" /> 
    <property name="order" value="1" /> 
</bean> 
<!-- UrlBasedViewResolver to Handle Redirects & Forward --> 
<bean id="urlViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" /> 
    <property name="order" value="2" /> 
</bean>   

क्या होता है स्पष्ट रूप से यहाँ से समझाया गया है http://projects.nigelsim.org/wiki/RedirectWithSpringWebMvc

8

उत्तरों को पूरा करने के लिए, स्प्रिंग एमवीसी दृश्य रिसेल्वर का उपयोग करता है (उदाहरण के लिए, एक्स्टाव मेटियन, इंटरनल रिसोर्सव्यू रीसोलॉल्वर के रूप में) विशिष्ट दृश्य इसलिए पहला कदम यह सुनिश्चित कर रहा है कि एक दृश्य रिसेल्वर कॉन्फ़िगर किया गया है।

दूसरा, आपको पुनर्निर्देशन (रीडायरेक्ट या अग्रेषित) के यूआरएल पर ध्यान देना चाहिए। "/" से शुरू होने वाला एक यूआरएल का अर्थ है कि यह एप्लिकेशन में एक यूआरएल पूर्ण है। जैसा कि जिगर कहते हैं,

return "redirect:/index.html"; 

काम करना चाहिए। यदि आपका दृश्य एप्लिकेशन की जड़ में रेखांकित करता है, तो वसंत इसे पा सकता है। यदि बिना किसी "/" के यूआरएल, जैसे कि आपके प्रश्न में, इसका मतलब है कि यूआरएल रिश्तेदार है। यह बताता है कि यह पहले क्यों काम करता था और काम नहीं करता था। यदि आपका पृष्ठ "रीडायरेक्ट" को मौके से रूट में रेखांकित करता है, तो यह काम करता है। यदि नहीं, तो वसंत दृश्य नहीं ढूंढ सकता है और यह काम नहीं करता है।

यहाँ स्प्रिंग

protected void renderMergedOutputModel( 
Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) 
throws IOException { 
    // Prepare target URL. 
    StringBuilder targetUrl = new StringBuilder(); 
    if (this.contextRelative && getUrl().startsWith("/")) { 
    // Do not apply context path to relative URLs. 
    targetUrl.append(request.getContextPath()); 
    } 
    targetUrl.append(getUrl()); 

    // ... 

    sendRedirect(request, response, targetUrl.toString(), this.http10Compatible); 
} 
2

की RedirectView की विधि Axtavt जवाब सही है के स्रोत कोड है।

यह आपके रिसोल्वर (आधार पर एनोटेशन) की तरह दिखना चाहिए कैसे:

@Bean 
UrlBasedViewResolver resolver(){ 
    UrlBasedViewResolver resolver = new UrlBasedViewResolver(); 

    resolver.setPrefix("/views/"); 
    resolver.setSuffix(".jsp"); 
    resolver.setViewClass(JstlView.class); 

    return resolver; 
} 

जाहिर है अपने विचारों निर्देशिका का नाम अपनी परियोजना के आधार पर बदल जाना चाहिए।

3

इस

HttpServletResponse response;  
response.sendRedirect(".../webpage.xhtml"); 
+3

जब कोई प्रश्न पूछता है, तो उत्तर देने से पहले पूछने वाले विवरण देखें ... उन्होंने 2011 में यह सवाल किया था ... यह बेहद असंभव है कि यह सवाल अभी भी उत्तर पर इंतजार कर रहा है, या यहां तक ​​कि नए आने वालों के लिए भी मायने रखता है ... इसके अलावा, जवाब देने पर, लोगों को सिखाने के तरीके में जवाब को समझाने/मार्गदर्शन करने का प्रयास करें जो नहीं जानते कि आप क्या कर रहे हैं .... जैसे 'फिर HttpServletResponse (फिर एक स्रोत लिंक), एक प्रणाली है जो x, y, z , और आप एक्स के लिए उपयोग कर सकते हैं ... ' – Bonatti

+2

@ बोनाट्टी - तथ्य यह है कि ओपी उत्तर पर इंतजार नहीं कर रहा है, इस जवाब की लंबी अवधि की उपयोगिता के साथ कुछ लेना देना नहीं है ... और वहां अभी भी लोग हैं जो चाहते हैं वसंत में पुनर्निर्देशित करने के बारे में जानने के लिए। –

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