在Spring应用程序中显示jasper报告HTML页面(web应用程序)



我是Spring Roo新手。

我使用Spring Roo创建了一个应用程序。当我在Spring Roo中使用Webapp示例时,我使用PDF, Word, ....获得了良好的结果但是HTML和"HTML逐页查看器"不起作用。当我将HTML和"HTML Page By Page Viewer"更改为Hello World时,它们看起来是正确的。这样JSP页面就被正确地声明了。而且我没有得到任何错误。

使用Spring Roo应用程序之外的JasperReports库的Webapp示例代码,我得到了期望的结果,但是当我在Spring Roo应用程序中使用相同的JSP文件时,我得到了一个空屏幕。

在JSP中,我检查JasperPrint对象是否为空,并且可以看到它有10页。System.out.println("Aantal pagina's = " + jasperPrint.getPages().size());

在FileUploadController中,我设置了会话属性。然后启动message.jsp文件。这个message.jsp文件类似于JasperReports Webapp示例中的Export页面。jsp文件显示正确。此外,所有的PDF, Word等链接都工作正常,我确实看到了Jasper报告的正确PDF表示。只有前2个链接,HTML和HTML查看器页面逐页显示不正确。HTML页面为空。当我用"Hello World"改变页面时,它显示正确。

在Spring Roo我有一个FileUpload实体。在FileUploadController我添加:

 @RequestMapping(method = RequestMethod.POST, produces = "text/html")
 public String create(@Valid FileUpload fileUpload, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) throws URLNotFoundException {
    if (bindingResult.hasErrors()) {
        populateEditForm(uiModel, fileUpload);
        return "fileuploads/create";
    }
    File file = null;
    uiModel.asMap().clear();
    CommonsMultipartFile image = fileUpload.getImage();
    if (image != null) {
        file = new File(image.getOriginalFilename());
        System.out.println("Original filename = " + image.getOriginalFilename());
        try {
            image.transferTo(file);
            fileUpload.setContentType(image.getContentType());
            fileUpload.setPath(file.getAbsolutePath());
            fileUpload.setRemoteUrl(httpServletRequest.getRemoteAddr());
        } catch (Exception e) {
            e.printStackTrace();
            return "fileuploads/create";
        }
    }
    File jrPrintFile = file;
    JasperPrint jasperPrint = null;
    try {
        jasperPrint = (JasperPrint)JRLoader.loadObject(jrPrintFile);
    } catch (JRException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    httpServletRequest.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
    httpServletRequest.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
    httpServletRequest.setAttribute("filePath", file.getAbsolutePath());
    httpServletRequest.setAttribute("message", "The report " + image.getOriginalFilename() + "has been done successfully!");
    fileUpload.persist();
    return "fileuploads/message";
    //  return "redirect:/fileuploads/" + encodeUrlPathSegment(fileUpload.getId().toString(), httpServletRequest);
 }
 }

我的Message.jsp文件是(像JasperReports Webapp示例中的导出页面)

      <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
         pageEncoding="ISO-8859-1" import="java.util.Date"%>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
         "http://www.w3.org/TR/html4/loose.dtd">
      <html>
            <h3>HTML viewers</h3>
            <ul>
               <li><a href="jasperHtmlView" target="_blank"><span class="desc">HTML
                  viewer</span></a>
               </li>
               <li><a href="jasperViewer" target="_blank"><span class="desc">HTML
                  Page By Page Viewer</span></a>
               </li>
            </ul>
            <h3>PDF viewer</h3>
            <h3>
               <span class="desc"></span>
            </h3>
            <ul>
               <li><a href="servlets/pdf" target="_blank"><span class="desc">PDF
                  export</span></a>
               </li>
            </ul>
            <h3>Office&nbsp; viewers</h3>
            <ul>
               <li><a href="servlets/docx" target="_blank"><span
                  class="desc">Word (DOCX)</span></a></li>
               <li><a href="servlets/xlsx" target="_blank"><span
                  class="desc">Excel (XLSX)</span></a></li>
               <li><a href="servlets/xls" target="_blank"><span class="desc">Excel
                  2003(XLS)</span></a>
               </li>
               <li><a href="servlets/pptx" target="_blank"><span
                  class="desc">PowerPoint (PPTX)</span></a></li>
               <li><a href="servlets/odt" target="_blank"><span class="desc">penDocument
                  Text (ODT)</span></a>
               </li>
               <li><a href="servlets/ods" target="_blank"><span class="desc">OpenDocument
                  Spreadsheet (ODS)</span></a>
               </li>
            </ul>
            <%
               Date created = new Date(session.getCreationTime());
               Date accessed = new Date(session.getLastAccessedTime());
               Date expiry = new Date(session.getLastAccessedTime()
               + session.getMaxInactiveInterval() * 1000);
               %>
            <footer>
               <hr>
               <table style="width: 100%" border="0">
                  <tbody>
                     <tr>
                        <td>
                           <pre>Session ID</pre>
                        </td>
                        <td><%=session.getId()%></td>
                        <td>Method</td>
                        <td><%=request.getMethod()%></td>
                     </tr>
                     <tr>
                        <td>Created</td>
                        <td><%=created%></td>
                        <td>Request URI</td>
                        <td><%=request.getRequestURI()%></td>
                     </tr>
                     <tr>
                        <td>Last Accessed</td>
                        <td><%=accessed%></td>
                        <td>Path Info</td>
                        <td><%=request.getPathInfo()%></td>
                     </tr>
                     <tr>
                        <td>Next expired time</td>
                        <td><%=expiry%></td>
                        <td>Remote Address</td>
                        <td><%=request.getRemoteAddr()%></td>
                     </tr>
                  </tbody>
               </table>
               <hr>
            </footer>
         </body>
      </html>
我在html.jsp中的代码如下:
 <%@ page errorPage="error.jsp" %>
 <%@ page import="net.sf.jasperreports.engine.*" %>
 <%@ page import="net.sf.jasperreports.engine.*" %>
 <%@ page import="net.sf.jasperreports.engine.util.*" %>
 <%@ page import="net.sf.jasperreports.engine.export.*" %>
 <%@ page import="net.sf.jasperreports.j2ee.servlets.*" %>
 <%@ page import="java.util.*" %>
 <%@ page import="java.io.*" %>
 <%
    JasperPrint jasperPrint = (JasperPrint) session.getAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE);
    if (jasperPrint == null) {
        throw new JRRuntimeException("File WebappReport.jrprint not found.");
    }
    System.out.println("Jasper print object is NOT null");
    System.out.println("Aantal pagina's = " + jasperPrint.getPages().size());
    session.setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
    HtmlExporter exporter = new HtmlExporter();
    //  session.setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
    //  exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image=");
    exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "./servlets/image?image=");
    exporter.exportReport();
 %>

您可以尝试使用实现功能的gvNIX框架(基于Spring-roo)来轻松地与jasper报告和其他有趣的功能一起工作。

访问以下链接以了解更多关于gvNIX框架的信息:

http://github.com/disid/gvnixhttp://code.google.com/p/gvnix/

这里有一个关于如何使用gvNIX实现带有jasper报告的应用程序的示例:

http://github.com/DISID/gvnix-samples/tree/master/quickstart-app报告

问好,

相关内容

最新更新