读取模板参数并自动生成参数表单

编辑
  • 文档创建者:文档助手1
  • 浏览次数:8804次
  • 编辑次数:21次
  • 最近更新:Kevin-s 于 2019-06-09
  • 1. 问题描述

    上一节中我们实现了参数在上、工具栏在中、报表在下的布局方式,可以看到此时的参数界面我们没有采用 FineReport 内置的参数面板,而是自己写了一个参数表单。此时每个参数我们都需要定义其相应的 input 元素,若模板中参数比较多的时候,就需要写大段的代码。我们如何读取模板中的所有参数并自动生成 form 表单呢?

    效果如下:
    222



    2. 实现思路

    由二次开发文档可知,我们可以通过 getParameters() 来获取模板的所有参数,对每个参数我们将其名称赋值给 input 元素的 name 属性,那么只要遍历每个参数,就能自动生成对应的 input 元素了。

    3. 实现步骤

    3.1 编辑模板

    我们直接使用doc\Primary\Parameter\Parameter.cpt模板,但该模板只有一个数据集参数:地区,为了体现效果,我们再增加一个报表参数:NEW,如下图


    222

    因为参数界面与工具栏都是自定义的,因此,我们先去掉报表的内置参数界面与工具栏。

    去掉工具栏

    222

    去掉参数栏,把参数栏高度拉至最小即可

    3.2 自定义页面

    定义自定义页面 Autopara.jsp,代码如下

    <%@ page language="java" contentType="text/html; charset=gb2312"    
        pageEncoding="UTF-8"%>    
    <%@ page import="com.fr.base.*"%>    
    <%@ page import="com.fr.io.TemplateWorkBookIO"%>    
    <%@page import="com.fr.main.TemplateWorkBook"%>    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">    
    <html>    
        <head>    
            <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />    
            <title>读取模板参数列表自动生成参数决策报表</title>    
        </head>    
        <body>    
            <form    
                acti    
                method="post" target="reportFrame" name="FRform">    
                <%    
                    try {    
                        TemplateWorkBook workbook = null;   
                        // 读取当前环境下的模板并读取模板中的所有参数    
                       workbook = TemplateWorkBookIO.readTemplateWorkBook(        
                                     "\\doc\\Primary\\Parameter\\Parameter.cpt");     
                        Parameter[] paras = workbook.getParameters();   
                        // 遍历参数并生成对应的input元素    
                        for (int i = 0; i < paras.length; i++) {    
                            out.println("<script>document.write(\""    
                                    + paras[i].getName() + ":<input type='text' name='"    
                                    + paras[i].getName() + "' value='"    
                                    + paras[i].getValue().toString()    
                                    + "'/>\");</script>");    
                        }    
                    } catch (Exception e) {    
                        e.printStackTrace();    
                    }    
                %>    
                <input type=submit name="submit" value="查询">    
            </form>   
                <div id="toolbar">    
                <button type="button"    
                    onclick="document.getElementById('reportFrame').contentWindow.contentPane.gotoFirstPage()">    
                    首页    
                </button>    
                <button type="button"    
                    onclick="document.getElementById('reportFrame').contentWindow.contentPane.gotoPreviousPage()">    
                    上一页    
                </button>    
                <button type="button"    
                    onclick="document.getElementById('reportFrame').contentWindow.contentPane.gotoNextPage()">    
                    下一页    
                </button>    
                <button type="button"    
                    onclick="document.getElementById('reportFrame').contentWindow.contentPane.gotoLastPage()">    
                    末页    
                </button>    
            </div>    
            <iframe id="reportFrame" name="reportFrame" frameborder="1"    
                src="/webroot/decision/view/report?viewlet=doc/Primary/Parameter/Parameter.cpt&__showtoolbar__=false"    
                width=100% height=80%></iframe>    
        </body>    
    <html>   

       

    3.3 保存预览

    将该 Autopara.jsp 保存至 Web 服务器的报表工程如\WebReport\下面,启动服务器,在浏览器中输入如

    http://localhost:8080/WebReport/Autopara.jsp,就可以看到自动生成表单的效果了:


    注:由于需要通过 Java 来获取模板的参数,因此不能使用普通的 HTML 页面。

    附件列表


    主题: 部署集成
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]