下面以一个例子来介绍怎么在BIRT设计器中添加JAVA事件处理。在 Eclipse 中创建一个单一工程,引入样例报表,使用 Java 语言实现报表事件响应处理程序。引导读者在短时间内对百灵报表(BIRT)有一个初步了解,并掌握使用 Java 语言创建百灵报表(BIRT)事件响应处理程序的基本步骤和调试方法。
建立工程
按照如下步骤,建立一个Java工程,同时引入BIRT Engine API JAR 包。
图 2. 建立工程
1. 启动百灵报表(BIRT),在主菜单中选择 File -> New -> Project... 菜单项,打开 New Project 对话框。
图 3. New Project 对话框
2. 在 New Project 对话框中选择 Java -> Java Project 项目,单击 Next 按钮,打开 New Java Project 对话框。
图 4. New Java Project 对话框
3. 在 Project name 处输入“BirtWithJava”作为项目名称,单击 Next 按钮,打开 Java Settings 对话框。
图 5. Java Settings 对话框
4. 在 Java Settings 对话框中选择 Libraries 页面,单击 Add External JARs... 按钮.
图 6. Libraries 页面
5. 选择 “<百灵报表(BIRT)根目录>/plug-ins/org.eclipse.birt.report.engine_2.3.0.v20080616.jar“ 文件,添加为工程类库。这个 JAR 包文件是百灵报表(BIRT) 的 Engine API。对于不同版本的百灵报表(BIRT),该文件的文件名中所附带的版本信息是不一样的。
图 7. 引入 Engine API
6. 单击 Finish 按钮,当系统提示 “Open Associated Perspective?” 时,单击 Yes 按钮,如下结构的 Java 工程被创建出来。
图 8. BirtWithJava 工程
导入样例报表
按照如下步骤,导入一个样例报表。
图 9. 打开 Show View 对话框
1. 在主菜单中选择 Window -> Show View -> Other... 菜单项,打开 Show View 对话框。
图 10. Show View 对话框
2. 在 Show View 对话框中选择 Report and Chart Design -> Report Examples 项目,单击 OK 按钮,打开 Report Examples 窗口。
图 11. Report Examples 窗口
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
int parseStory(xmlDocPtr doc, xmlNodePtr cur)
{
xmlChar *key;
cur = cur->xmlChildrenNode;
while(cur != NULL)
{
//if((!xmlStrcmp(cur->name, (const xmlChar*)"abc")))
//{
// printf("[%s]\n", cur->name);
// parseStory(doc, cur);
//}
if((!xmlStrcmp(cur->name, (const xmlChar*)"mysql")))
{
printf("[%s]\n", cur->name);
parseStory(doc, cur);
}
else if((!xmlStrcmp(cur->name, (const xmlChar*)"host")))
{
key=xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
printf(" %s=>%s\n", cur->name, key);
xmlFree(key);
}
else if((!xmlStrcmp(cur->name, (const xmlChar*)"port")))
{
key=xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
printf(" %s=>%s\n", cur->name, key);
xmlFree(key);
}
else if((!xmlStrcmp(cur->name, (const xmlChar*)"db")))
{
key=xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
printf(" %s=>%s\n", cur->name, key);
xmlFree(key);
}
else if((!xmlStrcmp(cur->name, (const xmlChar*)"username")))
{
key=xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
printf(" %s=>%s\n", cur->name, key);
xmlFree(key);
}
else if((!xmlStrcmp(cur->name, (const xmlChar*)"password")))
{
key=xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
printf(" %s=>%s\n", cur->name, key);
xmlFree(key);
}
else if((!xmlStrcmp(cur->name, (const xmlChar*)"credits")))
{
key=xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
printf(" %s=>%s\n", cur->name, key);
xmlFree(key);
}
else if((!xmlStrcmp(cur->name, (const xmlChar*)"instructor")))
{
key=xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
printf(" %s=>%s\n", cur->name, key);
xmlFree(key);
}
cur = cur->next;
}
return 0;
}
int main(int argc, char **argv)
{
//定义2个指针,doc指向整个dom;cur指向结点,以后遍历树就靠这个指针了
xmlDocPtr doc;
xmlNodePtr cur;
//获取doc指针,也是把其他格式转成utf8的功能吧
doc=xmlParseFile(argv[1]);
if(doc==NULL)
{
printf("Document not parsed successfully. \n");
exit(1);
}
printf("xmlParseFile ok.\n");
// 取得结点指针
cur=xmlDocGetRootElement(doc);
if(cur==NULL)
{
printf("empty document. \n");
xmlFreeDoc(doc);
exit(1);
}
printf("xmlDocGetRootElement ok.\n");
// 取得根结点指针,我这里是root,记住,这里一定要是根结点
if (xmlStrcmp(cur->name, (const xmlChar *)"root"))
{
printf("document of the wrong type, root node != root\n");
xmlFreeDoc(doc);
exit(1);
}
printf("ok.\n");
//通过这个递归函数,遍历出所有感兴趣的结点。
parseStory(doc, cur);
//一定要释放doc哦。
xmlFreeDoc(doc);
exit(0);
}
1、在开发移动应用时,对需要链接的页面进行预加载是十分有必要的。因为当一个链接页面设置成为预加载方式时,在当前页面加载完成之后,目标页面也被自动加载到当前文档中,用户单击就可以马上打开,大大加快了页面访问的速度。
2、设置链接页面预加载,在<a>标签中添加data-prefetch属性,并将属性值设为true。在JQuery Mobile中要实现页面的预加载,另外一种方法是调用JavaScript代码中的全局性方法$.mobile.loadPage(),其效果跟data-prefetch一样。
3、示例代码:
<!DOCTYPE HTML >
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<link href=/blog_article/"Css/jquery.mobile-1.2.0.min.css" rel="Stylesheet" type="text/css"/>
<script src=/blog_article/"Js/jquery-1.8.3.min.js" type"text/javascript"></script>
<script src=/blog_article/"Js/jquery.mobile-1.2.0.min.js" type="text/javascript"></script>
</HEAD>
<BODY>
<div data-role="page">
<div data-role="header"><h1>预加载页</h1></div>
<div data-role="content">
<p><a href=/blog_article/"about.html"rel="external" data-prefetch="ture">点击进入</a></p>
</div>
<div data-role="footer"><h1>@2013 3i studio</h1></div>
</div>
</BODY>
</HTML>
4、效果图预览:
5、通过预加载方式,目标页面已注入当前页面: