Domanda

Sto cercando di produrre alcuni dati del modello su un PDF utilizzando Spring-MVC. Non funziona e mi chiedevo se qualcuno potesse offrire qualche consiglio.

Ho un file Spring-servlet.xml che include quanto segue:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="order" value="1"/>
    <property name="prefix" value="/WEB-INF/view/"/>
    <property name="suffix" value=".jsp"/>
</bean>

<bean id="xmlViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver">
    <property name="order" value="2"/>
    <property name="location">
        <value>/WEB-INF/spring-pdf-views.xml</value>
    </property>
</bean>

Nel file Spring-pdf-views.xml ho questo:

<bean id="MyPDF" class="com.example.MyPDFView"/>

Questa è la mia classe mypdfview:

public class MyPDFView extends AbstractPdfView {

    @Override
    protected void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer, 
            HttpServletRequest request, HttpServletResponse response) throws Exception {

        @SuppressWarnings("unchecked")
        Map<String, String> data = (Map<String, String>) model.get("modelData");

        Table table = new Table(2);
        table.addCell("Date");
        table.addCell("Name");
        table.addCell(data.get("modelData.dateValue"));
        table.addCell(data.get("modelData.nameValue"));

        document.add(table);
    }
}

Finalmente nel mio controller ho:

@RequestMapping(value="/pdfInformation", method=RequestMethod.POST)
public ModelAndView showPDF(ModelMap model, PDFInfo pdfInfo, BindingResult result) {
        return new ModelAndView("MyPDF", model);
}

Il problema che vedo nell'output è che non arriva mai a XMLViewResolver. Sta cercando di rendere il MYPDF come una vista JSTL. Questo è dai miei registri:

org.springframework.web.servlet.dispatcherservlet - rendering view [org.springframework.web.servlet.view.jstlview: nome 'mypdf'; Url [/web-inf/view/mypdf.jsp]] in dispatcherservlet con nome 'Spring'

Cosa mi manca?

È stato utile?

Soluzione

Da Il Javadoc per InternalResourceViewResolver:

NOTA: quando concapazione di ViewResolvers, un ResurceViewResolver interno deve sempre essere l'ultima, poiché tenterà di risolvere qualsiasi nome di vista, indipendentemente dal fatto che la risorsa sottostante esista effettivamente.

Scambia l'ordine dei tuoi risolutori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top