Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSP页面中的Jasper报告_Java_Jsp_Struts_Jasper Reports - Fatal编程技术网

Java JSP页面中的Jasper报告

Java JSP页面中的Jasper报告,java,jsp,struts,jasper-reports,Java,Jsp,Struts,Jasper Reports,如何在JSP页面中显示jasper报告?我正在使用iReport1.3.3工具创建 报告。我很难在JSP页面中显示jasper报告 是否可以将ArrayList传递给jasper reports 我需要以PDF和EXcel格式显示报告。似乎有一个DefaultJasperViewer.jsp,在 我认为写一个taglib会更好。请看这里: 这与JSF和Seam有关,但可能会给我们一些启发。我已经编写了一个struts(1.1)应用程序,它呈现PDF和CSV。我将在操作处理程序中执行此操作: pu

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

是否可以将ArrayList传递给jasper reports


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

似乎有一个DefaultJasperViewer.jsp,在

我认为写一个taglib会更好。请看这里: 这与JSF和Seam有关,但可能会给我们一些启发。

我已经编写了一个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);
            }
        }
    }
}
包报告;
导入java.lang.reflect.Method;
导入java.util.Collection;
导入java.util.Iterator;
导入java.util.array;
导入net.sf.jasperreports.engine.JRDataSource;
导入net.sf.jasperreports.engine.JRField;
导入net.sf.jasperreports.engine.JRException;
公共类CollectionDataSource实现JRDataSource{
私有迭代器迭代器=null;
私有对象当前=空;
公共集合数据源(集合列){
如果(列!=null){
迭代器=列迭代器();
}
}
公共集合数据源(对象数组[]){
这是(Arrays.asList(array==null?新对象[0]:array));
}
public boolean next()引发异常{
if(iterator==null | |!iterator.hasNext()){
返回false;
}否则{
current=iterator.next();
返回true;
}
}
公共对象getFieldValue(JRField字段)引发JRException{
if(“this”.equals(field.getName())){
回流;
}else if(当前==null){
返回null;
}否则{
Class clazz=current.getClass();
char chars[]=field.getName().toCharArray();
chars[0]=Character.toUpperCase(chars[0]);
字符串名称=新字符串(字符);
方法=null;
试一试{
method=clazz.getMethod(“get”+name);
}捕获(无此方法例外){
if(field.getValueClass()==Boolean.class){
试一试{
method=clazz.getMethod(“is”+名称);
}捕获(NoSuchMethodException e1){
}
}
}
if(方法==null){
抛出新的JRException(“没有字段的getter”+name);
}
试一试{
返回方法.invoke(当前);
}捕获(例外e){
抛出新的JRException(“getter中的异常为“+name,e”);
}
}
}
}

在JSP中执行此操作听起来是个非常糟糕的主意。为什么不在servlet中执行此操作?@Maurice。。这是我的要求。我正在使用struts框架,一旦操作成功,我将把它转发到xx.jsp页面。在该页面中,我正在创建一些数据的超链接。如果我点击那个超链接,它会调用jasper报告模板,并显示为PDF格式。“请帮帮我,我这一周都在苦苦挣扎。”莫里斯。。它就像在jsp页面中单击超链接一样,将呈现pdf或excel格式的报告。如果您不介意,可以给我发送一些完整的示例代码。我的电子邮件id是:i2iniru@gmail.com或i2inirupan@gmail.comis可以将ArrayList传递给xyz.jasper(xyz是文件名)模板,并将其填充为pdf或excel格式?@Maurice。。如果你不介意的话,你能给我发一些使用servlets为jasper reports生成pdf和csv格式的示例代码吗..我没有:我只在桌面应用程序中使用过jasper reports。