zoukankan      html  css  js  c++  java
  • Spring 中 AbstractExcelView 支持根据模板生成Excel文件. 通过设置 view 的 URL 属性指定模板的路径

     注意:
    1. 模板需放在 WEB-INF 目录下
    2. 指定模板路径时不需要添加扩展名, Spring将自动添加 .xls 到URL 属性中.
    3. 在指定URL前需先设置 view 的 ApplicationContext

    1. 控制器配置 control-context.xml

     1 <bean id="beanNameViewResolver"
    2 class="org.springframework.web.servlet.view.BeanNameViewResolver" />
    3
    4  <bean id="viewController" class="ViewController">
    5 <property name="dataModel">
    6 <ref bean="model-DataModel"/>
    7 </property>
    8 </bean>
    9
    10 <bean id="urlMapping"
    11 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    12 <property name="mappings">
    13 <props>
    14   <prop key="/view/*.report">viewController</prop>
    15 </props>
    16 </property>
    17 </bean>


    2. Excel视图子类化 ExcelView.java
    实现 org.springframework.web.servlet.view.document.AbstractExcelView 类中的 buildExcelDocument方法。

     1 public class ExcelView extends AbstractExcelView {
    2
    3 protected void buildExcelDocument(Map<String, Object> model,
    4 HSSFWorkbook wb, HttpServletRequest request, HttpServletResponse reqponse)
    5 throws Exception {
    6
    7 //...
    8   Object[] datas = (Object[]) model.get("data");
    9 //...
    10
    11 HSSFSheet sheet;
    12 //get the sheet 1 in template
    13 sheet = wb.getSheetAt(0);
    14 //handle this sheet
    15 //...
    16 }
    17 }


    3. 控制器 ViewController ViewController.java

     1 public class ViewController extends MultiActionController {
    2
    3 private DataModel dataModel;
    4
    5 public void setDataModel(DataModel dataModel){
    6 this.dataModel = dataModel;
    7 }
    8
    9 public ModelAndView exportToExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
    10
    11 Map<String,Object> model=new HashMap<String,Object>();
    12
    13 Object[] datas;
    14
    15 datas = dataModel.getDatas.toArray();
    16
    17 model.put("data", datas);
    18
    19 ExcelView excelView = new ExcelView();
    20
    21 excelView.setApplicationContext(this.getWebApplicationContext());
    22 excelView.setUrl("/WEB-INF/Template");
    23
    24 return new ModelAndView(excelView,model);
    25 }
    26 }


    4. web.xml

     1 <servlet>
    2 <servlet-name>viewController</servlet-name>
    3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    4 <init-param>
    5 <param-name>contextConfigLocation</param-name>
    6 <param-value>/WEB-INF/config/control-context.xml</param-value>
    7 </init-param>
    8 <load-on-startup>1</load-on-startup>
    9  </servlet>
    10  <servlet-mapping>
    11 <servlet-name>viewController</servlet-name>
    12 <url-pattern>*.report</url-pattern>
    13  </servlet-mapping>


    5. 运行
    http://hostname/view/exportToExcel.report
  • 相关阅读:
    UESTC 1061 秋实大哥与战争 线段树区间合并
    bzoj 2005: [Noi2010]能量采集 筛法||欧拉||莫比乌斯
    bzoj 1008: [HNOI2008]越狱 数学
    bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 优先队列+dij
    LightOJ 1138 二分
    AIM Tech Round 3 (Div. 2) A , B , C
    Codeforces Round #335 (Div. 2) C. Sorting Railway Cars
    hdu 4542 小明系列故事——未知剩余系 反素数 + 打表
    Codeforces Beta Round #27 (Codeforces format, Div. 2) E. Number With The Given Amount Of Divisors 反素数
    51nod 1060 最复杂的数 反素数
  • 原文地址:https://www.cnblogs.com/walk-the-Line/p/5387383.html
Copyright © 2011-2022 走看看