我的代码如下:看来只有靠自己啊这个是写的一个ReportInit 类,用来得到参数字段的,目前只用到了一个参数字段:
/*
 * Create Date: 2004-8-14  11:06
 * Create By: 李春雷
 * purpose:设置水晶报表的查询参数(目前支持7个参数的查询,有用的参数为编号)
 */
package com.infoearth.report; 
import com.crystaldecisions.report.web.viewer.*;
import com.crystaldecisions.sdk.occa.report.data.*;
import com.crystaldecisions.reports.reportengineinterface.JPEReportSourceFactory; 
import com.crystaldecisions.sdk.occa.report.reportsource.IReportSourceFactory2;
import com.crystaldecisions.sdk.occa.report.reportsource.IReportSource;public class ReportInit 

    private IReportSource rptSource;
    
    private Fields fields;
    
    public ReportInit(){
        rptSource = null;
        fields = null;
        }
    
    public IReportSource getRptsource(){
        return rptSource;
        }
        
    public Fields getFields(){
        return fields;
        }
        
    public  boolean setReport(String fname,String rptID){
         //获得查询条件
        String FileName = fname + ".rpt";
        String BH = rptID;
        String path = "report/"+FileName; //报表文件路径         
        try{                        
            IReportSourceFactory2 rsf = new JPEReportSourceFactory(); 
            java.util.Locale localetest = java.util.Locale.CHINA;
            rptSource = (IReportSource)rsf.createReportSource(path,localetest); 
            fields = new Fields(); 
            ParameterField pfield1 = new ParameterField(); //编号
            ParameterField pfield2 = new ParameterField(); //单位
            ParameterField pfield3 = new ParameterField(); //人
            ParameterField pfield5 = new ParameterField(); //FIELD5
            ParameterField pfield6 = new ParameterField(); //FIELD6
            ParameterField pfield4_KSSJ = new ParameterField(); //开始时间
            ParameterField pfield4_JSSJ = new ParameterField(); //结束时间            Values vals1 = new Values(); 
            Values vals2 = new Values(); 
            Values vals3 = new Values(); 
            Values vals5 = new Values(); 
            Values vals6 = new Values(); 
            Values vals4_KSSJ = new Values(); 
            Values vals4_JSSJ = new Values();             ParameterFieldDiscreteValue pfieldDV1 = new ParameterFieldDiscreteValue(); 
            ParameterFieldDiscreteValue pfieldDV2 = new ParameterFieldDiscreteValue(); 
            ParameterFieldDiscreteValue pfieldDV3 = new ParameterFieldDiscreteValue(); 
            ParameterFieldDiscreteValue pfieldDV5 = new ParameterFieldDiscreteValue(); 
            ParameterFieldDiscreteValue pfieldDV6 = new ParameterFieldDiscreteValue(); 
            ParameterFieldDiscreteValue pfieldDV4_KSSJ = new ParameterFieldDiscreteValue(); 
            ParameterFieldDiscreteValue pfieldDV4_JSSJ = new ParameterFieldDiscreteValue(); 
            //设置第一个参数:编号
            pfield1.setReportName(""); 
            pfield1.setName("BH"); 
            pfieldDV1.setValue(BH); 
            pfieldDV1.setDescription("编号"); 
            vals1.add(pfieldDV1); 
            pfield1.setCurrentValues(vals1); 
            //设置第二个参数:单位部门
            pfield2.setReportName(""); 
            pfield2.setName("DW"); 
            pfieldDV2.setValue(""); 
            pfieldDV2.setDescription("发单部门"); 
            vals2.add(pfieldDV2); 
            pfield2.setCurrentValues(vals2); 
            //设置第三个参数:人
            pfield3.setReportName(""); 
            pfield3.setName("REN");
            pfieldDV3.setValue(""); 
            pfieldDV3.setDescription("申请人、下达人、操作人、负责人等");  
            vals3.add(pfieldDV3); 
            pfield3.setCurrentValues(vals3); 
            //设置第五个查询字段
            pfield5.setReportName(""); 
            pfield5.setName("FIELD5");
            pfieldDV5.setValue(""); 
            pfieldDV5.setDescription("查询字段5:任务来源线路名称等");  
            vals5.add(pfieldDV5); 
            pfield5.setCurrentValues(vals5); 
            //设置第六个查询字段
            pfield6.setReportName(""); 
            pfield6.setName("FIELD6");
            pfieldDV6.setValue(""); 
            pfieldDV6.setDescription("查询字段6:更改原因、工作内容等");  
            vals6.add(pfieldDV6); 
            pfield6.setCurrentValues(vals6); 
            //设置开始时间
            pfield4_KSSJ.setReportName(""); 
            pfield4_KSSJ.setName("KSSJ");
            pfieldDV4_KSSJ.setValue(""); 
            pfieldDV4_KSSJ.setDescription("开始时间");  
            vals4_KSSJ.add(pfieldDV4_KSSJ); 
            pfield4_KSSJ.setCurrentValues(vals4_KSSJ); 
            //设置结束时间
            pfield4_JSSJ.setReportName(""); 
            pfield4_JSSJ.setName("JSSJ");
            pfieldDV4_JSSJ.setValue(""); 
            pfieldDV4_JSSJ.setDescription("结束时间");  
            vals4_JSSJ.add(pfieldDV4_JSSJ); 
            pfield4_JSSJ.setCurrentValues(vals4_JSSJ); 
            //参数字段和报表关联
            fields.add(pfield1); 
            fields.add(pfield2); 
            fields.add(pfield3); 
            fields.add(pfield5); 
            fields.add(pfield6); 
            fields.add(pfield4_KSSJ); 
            fields.add(pfield4_JSSJ); 
            return true;
            }
        catch(Exception e){                
            System.out.println("Class:ReportInit错误:"+e);
            return false;
            }       
    }        
}

解决方案 »

  1.   

    文件control.jpf:(是weblogic特有的java文件,你就把他理解为一个jsp文件,主要作用是设置fields和rptSource,以便用来显示的viewer.jsp用,当执行成功时(也就是return new Forward("success");),就跳到viewer.jsp页面了)
        /**
         * @jpf:action
         * @jpf:forward name="success" path="viewer.jsp"
         * @jpf:forward name="false" path="error.jsp"
         */
        protected Forward showRpt()
        {
            String rptName = this.getRequest().getParameter("rptID");
            String rptBH = this.getRequest().getParameter("rptBH"); 
            if ((rptName!=null) && (rptBH!=null)) {
                rptName = this.dbCtrl.getEmbodyName(rptName);
                ReportInit rpt = new ReportInit();     //这个是初始化一个ReportInit对象
                boolean result = rpt.setReport(rptName, rptBH);
                if(result==true) {
                    Fields fields = rpt.getFields(); 
                    IReportSource rptSource = rpt.getRptsource();  
                    this.getSession().setAttribute("fields", fields);
                    this.getSession().setAttribute("rptSource", rptSource);  
                    return new Forward("success");
                } else {
                    return new Forward("false");
                }
            }
            return new Forward("false");
        }
    文件名称:viewer.jsp:
    <%@ page language="java" contentType="text/html;charset=utf-8"%> 
    <%@ page import= "com.crystaldecisions.report.web.viewer.*, 
    com.crystaldecisions.sdk.occa.report.data.*, 
    com.crystaldecisions.reports.reportengineinterface.JPEReportSourceFactory, 
    com.crystaldecisions.sdk.occa.report.reportsource.IReportSourceFactory2, 
    com.crystaldecisions.sdk.occa.report.reportsource.IReportSource"%>
    <%@ taglib uri="netui-tags-html.tld" prefix="netui"%> 
    <!-- ../crystalreportviewers10/css/default.css -->
    <LINK rel="stylesheet" type="text/css" href="../query/crystalreportviewers10/css/default.css">
    <% 
    IReportSource rptSource = (IReportSource)session.getAttribute("rptSource"); 
    Fields fields = (Fields) session.getAttribute("fields");
    ConnectionInfos connInfos = new ConnectionInfos();
    IConnectionInfo connInfo1 = new ConnectionInfo();
    connInfo1.setUserName("developer");
    connInfo1.setPassword("pwsc");
    connInfos.add(connInfo1);
    CrystalReportViewer viewer = new CrystalReportViewer(); 
    viewer.setReportSource(rptSource); 
    viewer.setDatabaseLogonInfos(connInfos);
    viewer.setParameterFields(fields); 
    viewer.setEnableParameterPrompt(true);
    viewer.setOwnPage(true);
    viewer.setOwnForm(true);
    //viewer.setPrintMode(CrPrintMode.ACTIVEX);
    viewer.setHasExportButton(true);
    viewer.setHasPrintButton(true);
    viewer.setHasLogo(false);
    viewer.processHttpRequest(request, response,getServletConfig().getServletContext(), out); 
    viewer.refresh();
    %>