发新话题
打印

版主 您好!有问题请教您

1, 是
2. 能传参数进去,比如你想查工资报表,那你可以在web表单中,设置一个text域用于输入查询月份,如下所示:
  <form action='reportviewer?file=d:/salary.xml'>
    <input type='text' name='mymonth'>
   </form>
    那么你在设计 salary.xml时,可以写带参数的sql,如:
  select * from tb_salary where month=${mymonth}
    具体可参照 《JOR简表使用手册》中的 参数化报表 一节

3. 你不能直接在jor设计器上,设计出javabean数据源,但你可以通过api,做到这一点,办法是使用源码中的  jatools.dom.src.ArrayNodeSource 类.

TOP

String file = (String) request.getParameter("file");
         FileInputStream is = new FileInputStream(new File(file););
         ReportJob job = new ReportJob(is);
         job.setParameter("mymonth",request.getParameter("mymonth"))  // 把参数传到报表引擎里去
       // 输出报表到response上
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        job.printAsDHTML(ff, out);

具体你可以参照 JatoolsReportServlet, ReportWriter 两个类.

TOP

你的web表单上,如果有 <input type='text' name='year'  >这个时候,并且,你使用的是 reportviewer, 则你的报表,就会有year变量 即,has(year)为真

如果你用自己的servlet,则,你必须
job.setParameter("year",request.getParameter("year"))  ,则has(year)为真,如果你不这么做,则为假.

TOP

当你在 http://localhost:8080/jor/reportviewer?file=d:/a.xml时,服务器端会调用

tools\reportviewer.jsp -> ReportTag.java
在ReportTag.java 的 113-116行,有如下代码:

            for (Enumeration en = request.getParameterNames(); en.hasMoreElements();) {
                String name = (String) en.nextElement();
                job.setParameter(name, request.getParameter(name));
            }

从中可以看出,web端传过来的参数,都一个不落地传到报表任务中去了,这么解释你也许更明白一点.

TOP

发新话题