2010-10-29 13 views
6
से एक स्थिर HTML पृष्ठ पर

मेरे वसंत MVC आवेदन एक ही ContentNegotiatingViewResolver कि json resonses प्रतिपादन के लिए JsonView को परिभाषित करता है है:फॉरवर्ड नियंत्रक

<mvc:annotation-driven/> 

<context:component-scan base-package="world.domination.test"/> 

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="mediaTypes"> 
     <map> 
      <entry key="json" value="application/json"/> 
     </map> 
    </property> 
    <property name="defaultViews"> 
     <list> 
      <bean class="com.secondmarket.connector.springmvc.MappingJacksonJsonViewEx"/> 
     </list> 
    </property> 
</bean> 

पूरे आवेदन जड़ यूआरएल "MyApp" पर बैठता है। जैसा कि मुझे चाहिए सब कुछ काम करता है।

पहला प्रश्न है: एक निश्चित यूआरएल तक पहुंचने पर एक स्थिर HTML पृष्ठ कैसे वापस करें? कहें, जब स्प्रिंग यूरी/माईएप/टेस्ट तक पहुंचना है तो मैं एक HTML पेज/टेस्टस्टफ.html प्रस्तुत करना चाहता हूं जो रूट वेबैप फ़ोल्डर में रहता है।

मैं आगे चला गया और एक सरल नियंत्रक ने लिखा है:

@Controller 
@RequestMapping("test") 
public class TestConnector { 

    @Autowired 
    private RestTemplate tpl; 

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

    @RequestMapping(method = RequestMethod.POST) 
    public String post(@RequestParam("url") String url, @RequestParam("data") String data) { 
     return tpl.postForObject(url, data, String.class, new HashMap<String, Object>()); 
    } 
} 

प्राप्त() प्रणाली TestStuff.html प्रस्तुत करना स्प्रिंग बताने के लिए माना जाता है, लेकिन इसके बजाय मैं प्राप्त एक त्रुटि कह रही है कि नाम के साथ दृश्य "/TestStuff.html" गायब है।

दूसरा सवाल यूआरएल के लिए विस्तार डाल करने के लिए आवश्यकता से बचने के लिए कैसे है। मेरे उदाहरण में, जब मैं /MyApp/परीक्षणके बजाय /myapp/test.html का उपयोग अपने ContentNegotiatingViewResolver एक json राय यह है कि renders {} (खाली घुंघराले ब्रेसिज़)

किसी भी संकेत दिए गए अत्यधिक सराहना कर रहे हैं का उपयोग करता है।

+0

'ContentNegotiatingViewResolver' की आपकी कॉन्फ़िगरेशन से मैं समझ नहीं पा रहा हूं कि आप क्या हासिल करने की कोशिश कर रहे हैं। यह संकल्प लागू होता है जब एक ही संसाधन विभिन्न प्रस्तुतियों में प्रस्तुत किया जा सकता है। यदि कुछ संसाधन JSON में प्रस्तुत किए जाते हैं, जबकि अन्य HTML हैं, तो संकल्पकों की एक और कॉन्फ़िगरेशन की आवश्यकता है। – axtavt

उत्तर

5

अपने नियंत्रक से "/TestStuff.html" लौटने के बजाय, "पुनर्निर्देशित करें: /TestStuff.html" लौटने का प्रयास करें।

एक और विकल्प है अपने स्थिर पृष्ठों के लिए दृश्य रिज़ॉल्यूशन बनाना और पंजीकरण करना। इस तरह शायद कुछ: दृश्य-नियंत्रक टैग (विवरण के लिए उपयुक्त वसंत संदर्भ मैनुअल देखें):

<bean id="staticViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="prefix" value="/WEB-INF/static/"/> 
    <property name="suffix" value=".html"/> 
</bean> 
+0

यह "रीडायरेक्ट: /TestStuff.html" ठीक काम कर रहा है (कम से कम स्प्रिंग एमवीसी 3.1.1 के साथ) ... दृश्य रिसेल्वर जोड़ने से यह आसान है क्योंकि मैंने पहले से ही अपने सभी जेएसपी पृष्ठों के लिए परिभाषित किया है। –

0

सबसे अच्छा यह करने के लिए जिस तरह से InternalResourceViewResolver MVC के साथ संयुक्त का प्रयोग है। बस में शामिल हैं (इस मामले में अपने स्थिर फ़ाइल TestStuff.html/वेब-INF/स्थिर-पृष्ठों निर्देशिका में स्थित हो जाएगा) आपके आवेदन संदर्भ एक्सएमएल फ़ाइल में निम्न:

<bean> 
    <bean id="staticPagesViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/static-pages/"/> 
    <property name="suffix" value=".html"/> 
</bean> 

<mvc:view-controller path="/test" view-name="TestStuff"/> 
संबंधित मुद्दे