2016-04-08 3 views
1

Я следую this guide, чтобы скомпилировать и создать PDF с помощью struts2 jasper reports plugin, но мне нужно загрузить report.jrxml с другого пути, чем WEB_APP/report.jrxml.Struts2 + jasper plugin, изменить местоположение базовый путь

Это мой результат действия:

<action name="jasper" class="web.app.controller.JasperAction"> 
    <result name="success" type="jasper"> 
     <param name="location">${location}</param> 
     <param name="dataSource">map</param> 
     <param name="format">PDF</param> 
    </result> 
</action> 

${location} == /my/absolute/path где.

Я конечно получаю эту ошибку:

javax.servlet.ServletException: java.io.FileNotFoundException: WEB_APP/my/absolute/path/report.jasper 

Как я могу изменить "базовый путь"? Должна ли я лучше настроить эту зависимость?

<dependency> 
    <groupId>net.sf.jasperreports</groupId> 
    <artifactId>jasperreports</artifactId> 
    <version>${jasperreports.version}</version> 
    <type>jar</type> 
    <scope>compile</scope> 
    <exclusions> 
     <exclusion> 
      <artifactId>commons-collections</artifactId> 
      <groupId>commons-collections</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 

ответ

0

Я нашел решение, и вот код я реализовал (я опустил часть источника данных, потому что я думаю, что это бесполезно для примера):

ACTION CLASS

public class JasperAction extends ActionSupport implements ServletContextAware { 
    private static final Logger LOG = LogManager.getLogger(JasperAction.class); 

    private ServletContext servletContext; 
    private String location = "report.jasper"; 

    @Override 
    public String execute() throws Exception { 
     String jrxmlPath = "/my/path/to/report.jrxml"; 
     String jasperPath = servletContext.getRealPath("") + File.separator + location; 

     try { 
      JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath); 
     } catch (Exception e) { 
      LOG.error(e); 
      return ERROR; 
     } 

     return SUCCESS; 
    } 

    @Override 
    public void setServletContext(ServletContext servletContext) { 
     this.servletContext = servletContext; 
    } 

    public String getLocation() { 
     return location; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 
} 

struts.xml

<action name="jasper" class="web.bkgd.simba.controller.JasperAction"> 
    <result name="success" type="jasper"> 
     <param name="location">${location}</param> 
     <param name="format">PDF</param> 
    </result> 
</action> 

С помощью этого решения я могу получить свои .jrxml-файлы из определенного каталога на моем сервере, где пользователь может загружать файл без развертывания при каждом применении приложения (в моем случае это очень полезно, поскольку «report.jrxml» может отличаться в каждый производственный сервер, где приложение развертывается и может меняться со временем).

Смежные вопросы