All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.web.servlet.view.document.AbstractXlsView Maven / Gradle / Ivy

There is a newer version: 6.1.6
Show newest version
/*
 * Copyright 2002-2017 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.servlet.view.document;

import java.io.IOException;
import java.util.Map;

import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;

import org.springframework.web.servlet.view.AbstractView;

/**
 * Convenient superclass for Excel document views in traditional XLS format.
 * Compatible with Apache POI 3.5 and higher.
 *
 * 

For working with the workbook in the subclass, see * Apache's POI site * * @author Juergen Hoeller * @since 4.2 */ public abstract class AbstractXlsView extends AbstractView { /** * Default Constructor. * Sets the content type of the view to "application/vnd.ms-excel". */ public AbstractXlsView() { setContentType("application/vnd.ms-excel"); } @Override protected boolean generatesDownloadContent() { return true; } /** * Renders the Excel view, given the specified model. */ @Override protected final void renderMergedOutputModel( Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { // Create a fresh workbook instance for this render step. Workbook workbook = createWorkbook(model, request); // Delegate to application-provided document code. buildExcelDocument(model, workbook, request, response); // Set the content type. response.setContentType(getContentType()); // Flush byte array to servlet output stream. renderWorkbook(workbook, response); } /** * Template method for creating the POI {@link Workbook} instance. *

The default implementation creates a traditional {@link HSSFWorkbook}. * Spring-provided subclasses are overriding this for the OOXML-based variants; * custom subclasses may override this for reading a workbook from a file. * @param model the model Map * @param request current HTTP request (for taking the URL or headers into account) * @return the new {@link Workbook} instance */ protected Workbook createWorkbook(Map model, HttpServletRequest request) { return new HSSFWorkbook(); } /** * The actual render step: taking the POI {@link Workbook} and rendering * it to the given response. * @param workbook the POI Workbook to render * @param response current HTTP response * @throws IOException when thrown by I/O methods that we're delegating to */ protected void renderWorkbook(Workbook workbook, HttpServletResponse response) throws IOException { ServletOutputStream out = response.getOutputStream(); workbook.write(out); workbook.close(); } /** * Application-provided subclasses must implement this method to populate * the Excel workbook document, given the model. * @param model the model Map * @param workbook the Excel workbook to populate * @param request in case we need locale etc. Shouldn't look at attributes. * @param response in case we need to set cookies. Shouldn't write to it. */ protected abstract void buildExcelDocument( Map model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy