主题:[转帖]ajax+xml+webwork2+tomcat5.0+j2ee报表
准备工作:
初次接触到webwork2,花了一天左右的时间研究一番,在MyEclipse上运行起来一个j2ee报表项目的DEMO。关于怎么样在MyEclipse上配置webwork2,本人主要参考了文章: http://wiki.javascud.org/display/ww2cndoc/Setting+up+Eclipse+with+Tomcat ,这真是不错的文章。基本上只要参考该文章按部就班配置即可。
当然另一个重要的部分就是先设计报表模板,这里我们选择杰表2008作为报表工具。
用杰表2008创建美洲国家资源表的参数报表,
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/design.JPG[/img]
图1是报表模板;
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/data.JPG[/img]
图2是报表所用到的数据源
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/sql.JPG[/img]
图3是参数查询的sql语句
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/parameter3.JPG[/img]
图4是参数的设置截图
最后 将设计好的模板保存在 d:/country.xml,下面开始webwork2与报表的集成。
一、在webwork2中,你的控制层主要是实现一个action接口,然后再在xwork.xml中将action请求指向跳转的页面;
比如我的xwork.xml中是这样配置的:
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" " http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
<include file="webwork-default.xml"/>
<package name="default" extends="webwork-default">
<!-- Include webwork defaults (from WebWork JAR). -->
<default-interceptor-ref name="completeStack"/>
<action name="reportAction"
class="com.chinadcl.ReportAction">
<result name="success">reportAction.jsp</result>
</action>
<action name="ajaxReport"
class="com.chinadcl.AjaxReport">
<!--<result name="success">jrs.jsp</result>
--></action>
</package>
</xwork>
二、再看AjaxReport.java
注意:这里从ajax传进来的xml文件如下:
<report>
<path>
d:/country.xml</path>
<parameter>'South America'</parameter>
</report>
package com.chinadcl;
import java.io.*;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.jatools.core.ReportJob;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.Action;
public class AjaxReport implements Action {
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("AjaxReport...");
HttpServletResponse response = ServletActionContext.getResponse();
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("text/http;charset=utf-8");
//以下是解析WEB页面传输进来的xml文件
HttpServletRequest request = ServletActionContext.getRequest();
StringBuffer xml = new StringBuffer();
try {
BufferedReader reader = request.getReader();
String line = null;
while ((line = reader.readLine()) != null) {
xml.append(line);
}
} catch (Exception e) {
System.out.println("XML读取有误`…" + e.toString());
}
String xml_data = xml.toString();
Document xmlDoc = null;
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
xmlDoc = builder
.parse(new ByteArrayInputStream(xml_data.getBytes()));
} catch (ParserConfigurationException e) {
System.out.println(e);
} catch (SAXException e) {
System.out.println(e);
}
String filePath = xmlDoc.getElementsByTagName("path").item(0)
.getTextContent();
String parameter = xmlDoc.getElementsByTagName("parameter").item(0)
.getTextContent();
//以下是根据参数
//调用杰表2008生成报表,并返回给AJAX前台
PrintWriter out = response.getWriter();
ReportJob job = new ReportJob(new FileInputStream(filePath));
job.setParameter("$parameter3", parameter);
job.setParameter(job.HTML_BODY_ONLY, "true");
try {
ReportFactory rf = new ReportFactory();
rf.createOutput("country", "D:/country_temp");
job.printAsDHTML(rf, out);
} catch (Exception e) {
e.printStackTrace();
}
out.close();
//注意这里是返回null,如果是返回SUCCESS,将调用xwork.xml中的jrs.jsp页面
//<action name="ajaxReport"
// class="com.chinadcl.AjaxReport">
// <!--<result name="success">jrs.jsp</result>
// --></action>
// 因为在这里生产的报表直接返回给ajax前台,所以在xwork.xml中不需要配置返回结果,因为根本不调用。
return null;
}
}
三、在report.js中替换点div,显示报表:
var report_area = document.getElementById("jatools-report");
var xmlDoc = xmlHttp.responseText;
report_area.innerHTML = xmlDoc;
四、编程工作已经完成,下面让我们看看效果:
首先是初始化页面:
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/r1.JPG[/img]
然后选择Noorth America点击Show Result 按钮,通过ajax部分刷新报表显示的div层,如下:
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/r2.JPG[/img]
再看看选择South America的报表效果:
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/r3.JPG[/img]
至此,大功告成,以上便是在webwork2中集成杰表2008一个demo项目。
联系我:e-mail: jiangdh@jatools.com
qq: 29357120
msn: mailto:dh.jiang@live.cn
初次接触到webwork2,花了一天左右的时间研究一番,在MyEclipse上运行起来一个j2ee报表项目的DEMO。关于怎么样在MyEclipse上配置webwork2,本人主要参考了文章: http://wiki.javascud.org/display/ww2cndoc/Setting+up+Eclipse+with+Tomcat ,这真是不错的文章。基本上只要参考该文章按部就班配置即可。
当然另一个重要的部分就是先设计报表模板,这里我们选择杰表2008作为报表工具。
用杰表2008创建美洲国家资源表的参数报表,
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/design.JPG[/img]
图1是报表模板;
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/data.JPG[/img]
图2是报表所用到的数据源
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/sql.JPG[/img]
图3是参数查询的sql语句
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/parameter3.JPG[/img]
图4是参数的设置截图
最后 将设计好的模板保存在 d:/country.xml,下面开始webwork2与报表的集成。
一、在webwork2中,你的控制层主要是实现一个action接口,然后再在xwork.xml中将action请求指向跳转的页面;
比如我的xwork.xml中是这样配置的:
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" " http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
<include file="webwork-default.xml"/>
<package name="default" extends="webwork-default">
<!-- Include webwork defaults (from WebWork JAR). -->
<default-interceptor-ref name="completeStack"/>
<action name="reportAction"
class="com.chinadcl.ReportAction">
<result name="success">reportAction.jsp</result>
</action>
<action name="ajaxReport"
class="com.chinadcl.AjaxReport">
<!--<result name="success">jrs.jsp</result>
--></action>
</package>
</xwork>
二、再看AjaxReport.java
注意:这里从ajax传进来的xml文件如下:
<report>
<path>
d:/country.xml</path>
<parameter>'South America'</parameter>
</report>
package com.chinadcl;
import java.io.*;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.jatools.core.ReportJob;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.Action;
public class AjaxReport implements Action {
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("AjaxReport...");
HttpServletResponse response = ServletActionContext.getResponse();
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("text/http;charset=utf-8");
//以下是解析WEB页面传输进来的xml文件
HttpServletRequest request = ServletActionContext.getRequest();
StringBuffer xml = new StringBuffer();
try {
BufferedReader reader = request.getReader();
String line = null;
while ((line = reader.readLine()) != null) {
xml.append(line);
}
} catch (Exception e) {
System.out.println("XML读取有误`…" + e.toString());
}
String xml_data = xml.toString();
Document xmlDoc = null;
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
xmlDoc = builder
.parse(new ByteArrayInputStream(xml_data.getBytes()));
} catch (ParserConfigurationException e) {
System.out.println(e);
} catch (SAXException e) {
System.out.println(e);
}
String filePath = xmlDoc.getElementsByTagName("path").item(0)
.getTextContent();
String parameter = xmlDoc.getElementsByTagName("parameter").item(0)
.getTextContent();
//以下是根据参数
//调用杰表2008生成报表,并返回给AJAX前台
PrintWriter out = response.getWriter();
ReportJob job = new ReportJob(new FileInputStream(filePath));
job.setParameter("$parameter3", parameter);
job.setParameter(job.HTML_BODY_ONLY, "true");
try {
ReportFactory rf = new ReportFactory();
rf.createOutput("country", "D:/country_temp");
job.printAsDHTML(rf, out);
} catch (Exception e) {
e.printStackTrace();
}
out.close();
//注意这里是返回null,如果是返回SUCCESS,将调用xwork.xml中的jrs.jsp页面
//<action name="ajaxReport"
// class="com.chinadcl.AjaxReport">
// <!--<result name="success">jrs.jsp</result>
// --></action>
// 因为在这里生产的报表直接返回给ajax前台,所以在xwork.xml中不需要配置返回结果,因为根本不调用。
return null;
}
}
三、在report.js中替换点div,显示报表:
var report_area = document.getElementById("jatools-report");
var xmlDoc = xmlHttp.responseText;
report_area.innerHTML = xmlDoc;
四、编程工作已经完成,下面让我们看看效果:
首先是初始化页面:
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/r1.JPG[/img]
然后选择Noorth America点击Show Result 按钮,通过ajax部分刷新报表显示的div层,如下:
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/r2.JPG[/img]
再看看选择South America的报表效果:
[img]http://www.blogjava.net/images/blogjava_net/simon1006/webwork/r3.JPG[/img]
至此,大功告成,以上便是在webwork2中集成杰表2008一个demo项目。
联系我:e-mail: jiangdh@jatools.com
qq: 29357120
msn: mailto:dh.jiang@live.cn