SpringMVC整合jasperreport做报表
1,在springMVC环境搭建的基础上,配置视图解析器
报表的打印在这里是使用的ResourceBundleViewResolver视图解析器,需要注意的是,如果使用了多个视图解析器,那么,要使用order来确认各个视图解析器的顺序,要不然不会逐个解析器的执行,一般把将InternalResourceViewResolver放最后,也就是order的值最大
<!-- jsp页面视图处理 -->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="2"></property>
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
</bean>
<!-- PDF报表打印视图处理 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="order" value="0"></property>
<property name="basename" value="views"></property>
</bean>
<!-- 返回JSON格式的数据视图解析 @author 谢德文 -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1"></property>
<property name="mediaTypes">
<map>
<!-- 告诉视图解析器,返回的类型为json格式 -->
<entry key="json" value="application/json" />
</map>
</property>
<property name="defaultViews">
<list>
<!-- ModelAndView里的数据变成JSON -->
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>
二,在src目录下建立一个views.properties
#-------申通详情单打印
STO.(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView //固定,每个class都使用这个
STO.url=/WEB-INF/printPDF/express_cn/STO.jasper //这里指定报表的位置
三,将jasper文件拷贝到项目目录下(自定义位置)
四,控制器
@RequestMapping("/previewPDF/*")
@Controller
public class PrintPDF {
@Resource
private OrderDao orderDao;
@RequestMapping("printExpress.do")
public ModelAndView printExpress(ModelMap model){
TbShgwOrder orderView = orderDao.findById(TbShgwOrder.class, Long.parseLong(221+""));
//如果直接传对象bean不行,需要使用list传值
List<TbShgwOrder> orders = new ArrayList<TbShgwOrder>();
orders.add(orderView);
model.put("orderViews", orders); //将list放到model中
return new ModelAndView("STO",model); //这里的“STO”就是views.properties里面的key
}
}