如何在JSP页面中显示jasper报告?我正在使用iReport1.3.3工具创建 报告。我正在努力在JSP页面中显示jasper报告。
是否可以将ArrayList传递给Jasper报告?
我需要以PDF和EXcel格式显示报告。
我已经编写了一个Struts(1.1)应用程序,可呈现PDF和CSV。我将在动作处理程序中执行此操作:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("application/pdf"); OutputStream out = response.getOutputStream(); try { // generate the PDF } finally { out.close(); } return null; }
更新:将集合提供给JasperReports
package reports; import java.lang.reflect.Method; import java.util.Collection; import java.util.Iterator; import java.util.Arrays; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRField; import net.sf.jasperreports.engine.JRException; public class CollectionDataSource implements JRDataSource { private Iterator iterator = null; private Object current = null; public CollectionDataSource(Collection col) { if (col != null) { iterator = col.iterator(); } } public CollectionDataSource(Object array[]) { this(Arrays.asList(array == null ? new Object[0] : array)); } public boolean next() throws JRException { if (iterator == null || !iterator.hasNext()) { return false; } else { current = iterator.next(); return true; } } public Object getFieldValue(JRField field) throws JRException { if ("this".equals(field.getName())) { return current; } else if (current == null) { return null; } else { Class<?> clazz = current.getClass(); char chars[] = field.getName().toCharArray(); chars[0] = Character.toUpperCase(chars[0]); String name = new String(chars); Method method = null; try { method = clazz.getMethod("get" + name); } catch (NoSuchMethodException e) { if (field.getValueClass() == Boolean.class) { try { method = clazz.getMethod("is" + name); } catch (NoSuchMethodException e1) { } } } if (method == null) { throw new JRException("No getter for field " + name); } try { return method.invoke(current); } catch (Exception e) { throw new JRException("Exception in getter of " + name, e); } } } }