2012-02-29 12 views
10

के प्रस्तुत आउटपुट प्राप्त करना मुझे स्प्रिंग 3.1 एमवीसी व्यू के स्ट्रिंग में प्रस्तुत करने की आवश्यकता है (पीडीएफ कनवर्टर को भेजने के लिए, या एक एमआईएम ईमेल, आदि ...) औरस्प्रिंग 3.1 एमवीसी व्यू

इस नियंत्रक

@Autowired 
    TilesViewResolver viewResolver; 

में इंजेक्ट किया जाता और निम्नलिखित सहायक विधि:

private String renderViewToString(ModelMap map, HttpServletRequest request, HttpServletResponse httpServletResponse, final String viewName) { 
     final StringWriter html = new StringWriter(); 
     View pdfView = new View() { 
      @Override 
      public String getContentType() { 
       return "application/pdf"; 
      } 

      @Override 
      public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception { 

       HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(response) { 
        @Override 
        public PrintWriter getWriter() throws IOException { 
         return new PrintWriter(html); 
        } 
       }; 
       View realView = viewResolver.resolveViewName(viewName, Locale.US); 
       Map<String, Object> newModel = new HashMap<String, Object>(model); 
       newModel.put("pdfMode", Boolean.TRUE); 
       realView.render(newModel, request, wrapper); 
      } 
     }; 
     try { 
      pdfView.render(map, request, httpServletResponse); 
     } catch (Exception e) { 
      // Ignored for now 
     } 
     return html.toString(); 
    } 

क्रेडिट Ted Young और उनकेके लिए मैं निम्नलिखित कोड का उपयोग किया गयाजिससे मेरा कोड आधारित है।

मेरा प्रश्न यह करने का एक बेहतर तरीका है? कोड मैंने ठीक काम किया है लेकिन अब मैं उत्पादन के करीब आ रहा हूं और मैंने सोचा कि अगर सुधार के लिए जगह है तो मैं इसे आजमा देना चाहूंगा।

धन्यवाद सभी

+4

एनओपी, ठीक दिखता है। –

+0

आपने इसे एक प्रश्न के रूप में पूछा ... मैंने इसे एक उत्तर के रूप में देखा ... वास्तव में जो मैं खोज रहा था ... मेरे लिए बिल्कुल उपयोगी है क्योंकि मुझे केवल अपने जेसन प्रतिक्रिया के हिस्से के रूप में भेजने के लिए HTML की आवश्यकता है ... आदमी को अंगूठे ... तुम चट्टान! – CodeBurner

उत्तर

1

को आप एक साथ देख सकते हैं और नियंत्रक क्लब द्वारा MVC पैटर्न तोड़ रहे हैं। एक बेहतर समाधान एक दृश्य को परिभाषित करना और इसे ContentNegotiatingViewResolver पर पंजीकृत करना है। अनुरोध किए गए सामग्री प्रकार के आधार पर संकल्पकर्ता आपके विचार के अनुरोध को प्रतिनिधि करेगा।

उदा।

<bean 
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
     <property name="order" value="0" /> 
     <property name="mediaTypes"> 
      <map> 
       <entry key="pdf" value="application/pdf" /> 
      </map> 
     </property> 
     <property name="defaultViews"> 
      <list> 
       <bean class="com.abc.MyCustomView"> 
        <property name="contentType" value="pdf" /> 
       </bean> 
      </list> 
     </property> 
    </bean> 
संबंधित मुद्दे