Question

J'essaie de publier des données de modèle à un PDF à l'aide de Spring-MVC. Cela ne fonctionne pas et je me demandais si quelqu'un pouvait offrir des conseils.

J'ai un fichier spring-servlet.xml qui comprend les éléments suivants:

<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>

Dans le fichier printemps-pdf-views.xml, j'ai ceci:

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

Ceci est ma 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);
    }
}

Enfin dans mon contrôleur, j'ai:

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

Le problème que je vois dans la sortie est qu'il n'atteint jamais le XMLViewResolver. Il essaie de rendre le MYPDF comme vue JSTL. C'est de mes journaux:

org.springframework.web.servlet.dispatcherServlet - Rendering View [org.springframework.web.servlet.view.jstlview: name 'mypdf'; Url [/web-inf/view/mypdf.jsp]] dans Dispatterservlet avec le nom «printemps»

Qu'est-ce que je rate?

Était-ce utile?

La solution

De Le Javadoc pour InternalresourceViewResolver:

Remarque: Lorsque le chaînage ViewResolvers, un internalResourceViewResolver doit toujours être le dernier, car il tentera de résoudre tout nom de vue, peu importe si la ressource sous-jacente existe réellement.

Échangez l'ordre de vos résolveurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top