文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Java报表软件内置JS的使用之十

Java报表软件内置JS的使用之十

时间:2010-09-24  来源:blueideas

 

文章转自:http://blog.csdn.net/best_report/archive/2010/09/24/5902877.aspx

自定义填报

在使用Java报表软件填报时,个别用户为了需求,需要自定义填报。

下面以FineReportJava报表软件在报表属性中的填报页面设置中可以自定义填报功能。

实例:

该实例实现首先在工具栏上加一个按钮,通知服务器要做填报;然后服务器获得当前的SessionIDInfor,取出当前的报表,获得报表中A1、B1扩展后的格子,再把这组数据insert到数据库中;最后返回客户端一个讯息,表示填报成功了,客户端再弹个对话框,提示填报成功了。

1.    连接数据库FRDemo

2.    报表设计

2.1    新建报表

2.2    模板设计

添加一个名为ds1的数据库查询:SELECT * FROM customer,表样设计,如图

 

2.3    自定义报表填报属性

 

2.4    定义单元格空间属性

2.5    自定义报表Web属性

 

点击菜单栏报表|报表Web属性,进入报表Web属性窗口,在填报页面设置栏目中,将左边需要显示的按钮拖到中间的窗口中,并在右边窗口添加加载结束事件,实现自定义的填报功能,如图所示

 

在加载结束事件窗口中添加事件的JS代码

 

具体js代码如下

var $toolbar = $('.FR-ToolBar-disabled > table >tbody>tr');

var option = {

//"icon": "css:x-emb-email",

"listeners": [ {"once": false,

"action": function(e){

var xml = _g('${SessionID}').generateReportXML();

 $.ajax({

url : "test.jsp",

type : 'POST',

data : {op : 'test1', sessionID : '${SessionID}',

reportXML : xml},

complete : function(res, status) {

FR.showDialog("Relation", 300, 400, res.responseText);

}})

},

"eventName": "click"

}],

"text": "测试",

"invisible": false,

"type": "button",

"disabled": false,

"render": true};

$button = $('<div></div>');

FR.comp.create($button, "button", option);

$tc = $("<td>").append($button);

$toolbar.append($tc);

此段JS代码引用了一个test.jsp,代码为:

<%@ page import="com.fr.web.CustomSubmit" %>

<%@ page contentType="text/html" %>

<%  

     CustomSubmit.dealWithTest(request, response);

%>

将该test.jsp文件放在设计器安装的WebReport目录下。

该test.jsp文件又引用了一个CustomSubmit类,将该类编译后的.class文件放在

%WebReport\WEB-INF\classes\com\fr\web目录下,该类的代码具体如下

packagecom.fr.web;

importjava.io.PrintWriter;

importjava.util.ArrayList;

importjava.util.List;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importcom.fr.base.ColumnRow;

importcom.fr.report.Report;

importcom.fr.report.core.FormReport;

importcom.fr.report.core.PackedReport;

importcom.fr.web.ParameterConsts;

importcom.fr.web.core.SessionDealWith;

importcom.fr.web.core.SessionIDInfor;

importcom.fr.web.core.WebUtils;

publicclassCustomSubmit {

publicstaticvoiddealWithTest(HttpServletRequestreq, HttpServletResponse res) throws Exception {

String sessionID = WebUtils.getHTTPRequestParameter(req,ParameterConsts.SESSION_ID);

SessionIDInforsessionIDInfor = SessionDealWith.getSessionIDInfor(sessionID);

            List cellRelation = newArrayList();

    for(int i = 0, len = sessionIDInfor.getWorkBook2Show().getReportCount(); i <len; i++) {

            Report report = sessionIDInfor.getWorkBook2Show().getReport(i);

            if (report instanceofFormReport&& report instanceofPackedReport) {

                Report fr = (PackedReport)report;

//请注意这步,我想要取的是A1和B1两个格子扩展以后的他们之间关系和值,如果是想拿A1,B1,D5,对应添加ColumnRow.valueOf("D5")既可

List rl = ((FormReport)report).getExtendColumnRowList(newColumnRow[] {ColumnRow.valueOf("A1"), ColumnRow.valueOf("B1")});

                for (int c = 0, cl = rl.size(); c < cl; c++) {

                    ColumnRow[] crs = (ColumnRow[])rl.get(c);

                    ColumnRowValue[] crvs = newColumnRowValue[crs.length];

                    for (int index = 0, il = crs.length; index <il; index++) {

crvs[index] = newColumnRowValue(crs[index], fr.getCellValue(crs[index].column, crs[index].row));

                    }

                    cellRelation.add(crvs);

                }

            }

        }  

        //cellRelation里面存放着扩展以后的格子之间的关系和格子的值

//以111.cpt模板为例,数据列扩展后城市NewYork对应ID 1和4,在cellRelation里面就是cellRelation.get(0)和cellRelation.get(1),对应着两个ColumnRowValue[]

//第一个ColumnRowValue数组的ColumnRowValue[0]的ColumnRow是A1,Value是NewYork,ColumnRowValue[1]的ColumnRow是B1,Value是1

//第二个ColumnRowValue数组的ColumnRowValue[0]的ColumnRow是A1,Value是NewYork,ColumnRowValue[1]的ColumnRow是B2,Value是4

        if (cellRelation.size() > 0) {

            PrintWriter writer = WebUtils.createPrintWriter(res);

            for (int i = 0, len = cellRelation.size(); i <len; i++) {

                ColumnRowValue[] crvs = (ColumnRowValue[])cellRelation.get(i);

                StringBuffersb = newStringBuffer();

                for (int v = 0, vl = crvs.length; v <vl; v++) {

                    if (v != 0) {

                        sb.append(" ");

                    }

                    sb.append(crvs[v].toString());

                    if (v == vl - 1) {

                        sb.append("<br />");

                    }

                }

                writer.println(sb.toString());

            }          

            writer.flush();

            writer.close();

        }

        }

    publicstaticclassColumnRowValue {

        privateColumnRowcr;

        private Object value;

        publicColumnRowValue(ColumnRowcr, Object value) {

            this.cr = cr;

            this.value = value;

        }

        publicColumnRowgetColumnRow() {

            returncr;

        }

        public Object getValue() {

            return value;

        }

        public String toString() {

returnnew StringBuffer().append(cr.toString()).append(":").append(value.toString()).toString();

                }

            }

}

3.    保存并预览

点击填报预览,BS界面除了FR报表自带的提交按钮和数据校验按钮外,还多了一个测试按钮

 

点击测试按钮,出现测试界面

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载