我是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 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报告
问好,