Spring XML View Resolver无法正常工作

时间:2013-08-11 15:20:49

标签: java xml spring-mvc view resolver

使用Spring MVC我想从模型中创建PDF。

我已经创建了一个控制器,如下所示

@Controller
@RequestMapping("en/pdfdoc.gov")
@Transactional(propagation=Propagation.SUPPORTS)
public class PDFDocumentController extends SecurityController {

  @RequestMapping(method = RequestMethod.GET,params="action=allAssociations",headers="Accept=*/*")  
  public ModelAndView getAllassociations(HttpServletRequest request, HttpServletResponse response){

    Map<String, Object> revenueData= new HashMap<String, Object>();

    revenueData.put("1/20/2010", "$100,000");
    revenueData.put("1/21/2010", "$200,000");
    revenueData.put("1/22/2010", "$300,000");
    revenueData.put("1/23/2010", "$400,000");
    revenueData.put("1/24/2010", "$500,000");


    return new ModelAndView("PdfRevenueSummary","revenueData",revenueData);

  }
}

和视图

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.view.document.AbstractPdfView;

import com.lowagie.text.Document;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.PdfWriter;

public class PdfRevenueReportView extends AbstractPdfView{

@Override
protected void buildPdfDocument(Map<String, Object> model, Document document,
        PdfWriter pdfWriter, HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    // TODO Auto-generated method stub
    Table table= new Table(2);

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


    table.addCell("Month");
    table.addCell("Revenue");

    for (Map.Entry<String, String> entry : revenueData.entrySet()) {

        table.addCell(entry.getKey());
        table.addCell(entry.getValue());

    }

    document.add(table);


}

}

dispatcher-servlet.xml

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">


<property name="mediaTypes">
 <map>
   <entry key="atom" value="application/atom+xml"/>
   <entry key="html" value="text/html"/>
   <entry key="json" value="application/json"/>
 </map>
  </property>

  <property name="viewResolvers">
  <list>
  <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="prefix" value="/WEB-INF/pages/"/>
     <property name="suffix" value=".jsp"/>
   </bean>  
  </list>
 </property>
 <property name="defaultViews">
  <list>
 <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
  </list>
 </property>
  </bean> 
 <bean id="pdfview" class="org.springframework.web.servlet.view.XmlViewResolver">
 <property name="order" value="0"/>
   <property name="location">  
            <value>/WEB-INF/spring-pdf-views.xml</value>
   </property>  
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass">
        <value>
            org.springframework.web.servlet.view.tiles2.TilesView
        </value>
    </property>  
</bean>

<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/tiles.xml</value>
        </list>
    </property>
</bean>

spring-pdf-views.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="PdfRevenueSummary"
    class="in.subrat.nayak.view.PdfRevenueReportView">
</bean>

</beans>

因为tiles.xml工作正常,所以我没有发布代码部分。

上面代码中的问题是当我通过

从控制器返回视图时
  

返回新的ModelAndView(“PdfRevenueSummary”,“revenueData”,revenueData);

它没有被重定向到class PdfRevenueReportView

中给出的spring-pdf-views.xml

所以请帮助我摆脱这个问题

希望上述问题清楚明确......

1 个答案:

答案 0 :(得分:0)

2天后,我找到了我需要的东西

问题很简单,只是让课程PDFDocumentController扩展了课程AbstractController

刚刚制作

public class PDFDocumentController extends AbstractController

而不是

public class PDFDocumentController extends SecurityController