新公司工作一年多,接触最多的就是统计,当然用于统计数据展示的birt了解多了些,虽然对于底层实现认识不深,但是对于birt与ssh集成还是有些感受,尽管这种感受仅是来源于自己重构项目中birt+ssh整合demon,尽管没有实际应用到项目中,确切的说是没有完全应用到项目中。因为我不想一个人单打独斗整个统计模块,也不想把自己纠结在统计模块中,当然我也不一定做得好,但是感受吗——对于过去的总结,无需多量的抱怨的,因为那已经是过去。
由于ssh整合各种项目各种整合方法,当然谈及整合,java小生还很稚嫩,不在此卖瓜。仅总结birt如何与struts整合,统计数据,希望与大家共同学习进步。
一)应用技术与环境:
ssh:struts1.2+spring2.0+hibernate3.0
birt:birt2.3
tomcat:tomcat5.5
dababase:oracle10g
system:windowsXP
二)birt优点:
1:birt交互性强,因为birt基本就是个完整的jsp页面,所以不会存在展现上的难题
2:birt数据源支持更多,jdbc data source ,scripted data source,web service data source,
xml data source,procedure
3:与eclipse集成,开发更方便,效率更快
4:开源,扩展性更强,免费,使用成本低
三)birt缺点
1:底层入侵,数据收集与展示剥离后存在诸多问题
2:大数据量展示容易内存泄露
4:页面内部嵌入大量外部资源,修改,扩展有难度
四)birt与struts整合
a 增加代码
public Object getBean(String name ) {
if (ctx == null) {
ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
}
return ctx.getBean(name);
}
protected QueryInfo getQueryInfo(HttpServletRequest request) {
QueryInfo info = new QueryInfo();
int pageSize = getPageSize(request);
int currentPage = getCurrentPage(request);
info.setLimit(pageSize);
info.setOffset(pageSize * (currentPage - 1));
return info;
}
/**
* 获取每页显示的条数
* @param request 请求对象
* @return 每页显示的条数
*/
protected int getPageSize(HttpServletRequest request) {
int ps = 0;
String pageSize = request.getParameter(PAGE_SIZE);
if (!StringUtil.isEmpty(pageSize)) {
ps = StringUtil.string2Int(pageSize);
} else {
ps = DEFAULT_PAGE_SIZE;
}
request.setAttribute("pageSize", ps);
return ps;
}
/**
* 获取当前页数
* @param request 请求对象
* @return 当前页数
*/
protected int getCurrentPage(HttpServletRequest request) {
int cp = 0;
String currentPage = getDisplayTagParam(request, REGEX);
if (!StringUtil.isEmpty(currentPage)) {
cp = StringUtil.string2Int(currentPage);
} else {
cp = DEFAULT_CURRENT_PAGE;
}
return cp;
}
public String getDisplayTagParam(HttpServletRequest request, String regex) {
Enumeration en = request.getParameterNames();
while (en.hasMoreElements()) {
String name = (String) en.nextElement();
if (name.matches(regex)) {
return request.getParameter(name);
}
}
return null;
}
b:修改__getContext 方法
protected IContext __getContext(HttpServletRequest request,
HttpServletResponse response)throws BirtException
{
BirtReportServiceFactory.getReportService().setContext(
getServletContext(), null);
SpInfoManager spInfoManager = (SpInfoManager)getBean("SpInfoManager");
QueryInfo info = getQueryInfo(request);
PartialCollection collection = spInfoManager.getWhiteAndBlackInfo("21006", "", info) ;
List dataList = collection.getRealDataSet() ;
request.setAttribute("result",dataList );
return new BirtContext(request, response);
}
c:web。xml修改ViewerServlet 指向的class
ViewerServletcn.com.superv.netmessage.sp.web.action.ViewerServlet
d:web.xml中增加 对于访问ViewerServlet 过滤器
validateSession/frameset*hibernateFilter/frameset*
2:增加一个action ,进行数据收集,并跳到birt页面显示容器(birt嵌入到jsp中)
if(birtName.equals("script_data_source_demon.rptdesign")){
/*****参数存入request********************/
request.setAttribute("endTime", endTime) ; //保存保存参数
}
return mapping.findForward("birtPageWindow");//转发到birt容器(嵌入birt的jsp页面)
3:birt 嵌入jsp
a:在jsp中引入
b:birt标签引入birt页面
4:birt中获取参数及数据源
a:script:open
importPackage(Packages.javax.servlet.http);
req = reportContext.getHttpServletRequest();
list = req.getAttribute("result");
spInfo = new Packages.cn.com.superv.netmessage.oam.web.model.WhiteAndBlackInfo();
resultArray = list.iterator();
b:script:fetch
if(resultArray.hasNext()==false){
return false ;
}
spInfo = resultArray.next();
row["name"]=spInfo.getSpName();
row["spid"]=spInfo.getSpId();
row["spcode"]=spInfo.getSpCode();
return true ;
c:scirpt:close
result = null ;
spInfo = null ;
5:数据展示
a:Data Set绑定显示列
[img]http://dl.iteye.com/upload/attachment/600360/3dcb4e6f-3858-378a-9a9e-b5e4c35f8acb.png" alt="" width="737" height="175[/img]
6:birt分页自定义
a:。。。。。。。。。。。
b:。。。。。。。。。。。
[size=10pt; color: #000000; font-family: 'Courier New';]
四)效果图
。。。。。。。。。。
[size=10pt; color: #000000;]
[img]http://dl.iteye.com/upload/attachment/600367/7b9cecf1-9734-3f64-ab29-56f39911e5fc.png" alt="[/img]
[/size]
[/size]
ssh+birt
猜你喜欢
转载自zld406504302.iteye.com/blog/1289272
今日推荐
周排行