为了以后的项目扩展需要,公司决定开发一个项目报表平台,基于ssh2框架开发一个可以通用的报表平台。官方的例子不可以实现通用性,决定对共用部分实现封装,实现复用性。项目的设计思路如下(注:报表使用的版本是 4.0.0.3):
部分封装如下:
1:前台报表文件读取
/**
* 本地服务器读取tabFile文件的实现方式
*
* @param name
* 需要读取的报表名字(可以带路径)
*/
reaedTabFile : function reaedTabFile(url, name) {
this.F_NAME = name;
ChinaExcel.ReadHttpFile(url + "/" + name + ".tab");
},
2:数据校验部分后台接口的实现
public class RptFrmInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
// 请求参数的获取
HttpServletRequest req = ServletActionContext.getRequest();
IRptFrmHander rptFrmHander = ChinaUtil.getRptFrmHander(req);
JSONObject jsonObj = ChinaUtil.getJSONObject(req);
if (rptFrmHander != null) {
// 调用的报表更新或者保存前的处理
String StrXmlData = jsonObj.getString("StrXmlData");
if (rptFrmHander.saveCheck(StrXmlData)) {
String result = invocation.invoke() ;
return result;
}
} else {
String result = invocation.invoke() ;
return result;
}
//信息验证失败的处理
Method method = invocation.getAction().getClass().getMethod("checkError", new Class[0]);
String methodResult = (String) method.invoke(invocation.getAction(), new Object[0]);
return methodResult;
}
}
public static IRptFrmHander getRptFrmHander(HttpServletRequest req) {
JSONObject jsonObj = getJSONObject(req);
IRptFrmHander rptFrmHander = null;
if (jsonObj != null) {// 调用的报表更新或者保存前的处理
String tabName = jsonObj.getString("F_NAME");
rptFrmHander = (IRptFrmHander) SpringInit.getBean(tabName+"RptFrm");
}
return rptFrmHander;
}
public static JSONObject getJSONObject(HttpServletRequest req) {
String[] strAry = req.getParameterValues("jsonObject");
JSONObject jsonObj = null;
if (strAry.length == 1) {// 前台报表相关参数的获取
jsonObj = JSONObject.fromObject(strAry[0]);
}
return jsonObj;
}
下一节说明关于查询部分的前后台封装处理。