【问题标题】:Jasper Reports in JSP pageJSP 页面中的 Jasper 报告
【发布时间】:2011-03-29 08:37:36
【问题描述】:

如何在 JSP 页面中显示 jasper 报告?我正在使用 iReport1.3.3 工具创建
报告。我正在努力在 JSP 页面中显示碧玉报告。

是否可以将 ArrayList 传递给 jasper 报告?

我需要以 PDF 和 EXcel 格式显示报告。

【问题讨论】:

  • 在 JSP 中这样做听起来是个非常糟糕的主意。为什么不在 servlet 中执行此操作?
  • @Maurice ..这是我的要求..我正在使用 struts 框架,一旦操作成功,我会将其转发到 xx.jsp page.in 该页面我正在创建一些数据的超链接。如果我单击该超链接,它应该调用 jasper 报告模板并显示为 PDF 格式。请帮助我,我正在为漫长的一周而苦苦挣扎。

标签: java jsp struts jasper-reports


【解决方案1】:

我编写了一个渲染 PDF 和 CSV 的 struts (1.1) 应用程序。我会在动作处理程序中这样做:

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);
            }
        }
    }
}

【讨论】:

  • @Maurice..是不是像点击jsp页面中的超链接,会渲染pdf或者excel格式的报告
  • 如果你不介意的话,你可以给我一些完整的示例代码。我的电子邮件 ID 是:i2iniru@gmail.com 或 i2inirupan@gmail.com
  • 是否可以将 ArrayList 传递给 xyz.jasper(xyz 是文件名) 模板并将其填充为 pdf 或 excel 格式?
  • @Maurice.. 如果您不介意,可以给我一些使用 servlet 生成 pdf 和 csv 格式的示例代码,用于 jasper 报告..
  • 我没有:我只在桌面应用程序中使用过 jasper 报告。
【解决方案2】:

好像有一个DefaultJasperViewer.jsp,在http://jasperforge.org/plugins/espforum/view.php?group_id=112&forumid=102&topicid=35938上提到过

我认为写一个 taglib 会更好。看这里:http://seamframework.org/Community/JasperReportsSeam 这与 JSF 和 Seam 有关,但可能会给一些启发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多