spring mvc使用AbstractPdfView 返回pdf视图实现过程

1.环境介绍,maven工程,spring与springmvc注解方式进行整合。让spring管理除controller以外的bean,让spring mvc管理controller bean。

2.使用ModelAndView模式,给出视图类代码,并且给bean命名为PdfRevenueSummary:

@Component("PdfRevenueSummary")
public class PdfRevenueReportView extends AbstractPdfView {
	@Override
	protected void buildPdfDocument(Map model, Document document,
		PdfWriter writer, HttpServletRequest request,
		HttpServletResponse response) throws Exception {

		Map<String,String> revenueData = (Map<String,String>) model.get("revenueData");
		
		Table table = new Table(2);
		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);
	}

}

控制器类的代码,返回的是ModelAndView对象

@Controller
public class PDFController extends AbstractController {

	@RequestMapping("/getpdf") //进行访问路径设置
	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
		
		String output =
			ServletRequestUtils.getStringParameter(request, "output");
		
		//dummy data
		Map<String,String> revenueData = new HashMap<String,String>();
		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");
		
		if(output ==null || "".equals(output)){
		    //return normal view
		    return new ModelAndView("RevenueSummary","revenueData",revenueData);
			
		}else if("PDF".equals(output.toUpperCase())){
		    //return excel view
			System.out.println("come here");
		    return new ModelAndView("PdfRevenueSummary","revenueData",revenueData);
			
		}else{
		    //return normal view
		    return new ModelAndView("RevenueSummary","revenueData",revenueData);
			
		}	
	}
	
}

springmvc的设置类

@EnableWebMvc //启用springmvc自动注解
@ComponentScan(basePackages="myspring",useDefaultFilters=false,includeFilters={@Filter(type=FilterType.ANNOTATION,
classes={Controller.class}),
//自己写的过滤器,不让spring加载pdf的视图类,让springmvc加载视图类
@Filter(type=FilterType.CUSTOM,classes={myspring.inter.MyFilter.class})})
public class AppConfig implements WebMvcConfigurer {

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// TODO Auto-generated method stub
		registry.addInterceptor(new HelloInterceptor()).addPathPatterns("/**");
	}

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		// TODO Auto-generated method stub
		configurer.enable();

	}

	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		// TODO Auto-generated method stub
		registry.beanName(); //以返回的视图名字查找bean
		registry.jsp("/WEB-INF/views/", ".jsp");
		
	
	}

 

3.注意的一点是,为了让springmvc加载pdf的视图类,自己写了一个过滤器,不让spring扫描,让springmvc进行扫描加。我总结的大致执行过程是这样:在浏览器中输入地址,然后springmvc的拦截器拦截,交给根据url匹配的控制器,控制处理后返回一个

ModelAndView对象,根据视图名称,视图解析器解析视图,查到一个同名的bean,然后返回这个bean。

 

这是我自己的理解,有理解不对的地方,请各位老师指正。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值