3

spring-mvcを使用していくつかのモデルデータをPDFに出力しようとしています。それは機能しておらず、誰かがアドバイスを提供できるかどうか疑問に思いました。

以下を含むspring-servlet.xmlファイルがあります。

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

spring-pdf-views.xmlファイルにこれがあります:

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

これは私の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);
    }
}

最後に私のコントローラーには次のものがあります。

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

私が出力で見ている問題は、それがxmlViewResolverに到達しないことです。MyPDFをJSTLビューとしてレンダリングしようとしています。これは私のログからです:

org.springframework.web.servlet.DispatcherServlet-レンダリングビュー[org.springframework.web.servlet.view.JstlView:name'MyPDF'; 'spring'という名前のDispatcherServletのURL[/WEB-INF/view/MyPDF.jsp]]

私は何が欠けていますか?

4

1 に答える 1

5

InternalResourceViewResolverのJavadocから:

注:ViewResolverをチェーンする場合、InternalResourceViewResolverは常に最後である必要があります。これは、基になるリソースが実際に存在するかどうかに関係なく、任意のビュー名を解決しようとするためです。

リゾルバの順序を入れ替えます。

于 2011-03-22T15:23:45.597 に答える