Java JSP页面中的Jasper报告
如何在JSP页面中显示jasper报告?我正在使用iReport1.3.3工具创建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报告 是否可以将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。