利用填报监听类动态设置更新模式名
在一些项目进行实施的时候,应用的数据库用户名和密码往往都是临时的,而在项目上线后应用的数据库才是正式的。这样,我们在设计填报表的更新属性时,在更新属性中的模式名就不能固定下来,那么,我们怎样才能动态设置报表模版中更新属性的模式名呢?
那么,根据填报监听类的特性,我们就把动态设置报表模版中更新属性的模式名的代码写到beforeSave()方法中,这样就可以实现在填报前设置模式名,从而保证更新顺利进行了。
第一步:先打开一张普通填报表,查看更新属性中的模式名
我们先不设置模式名,在后面的填报监听类中设置。
第二步:编写填报监听类:
package com.runqian.input;
import com.runqian.report4.usermodel.*;
import com.runqian.report4.usermodel.input.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
public class MyInputListener extends AbstractInputListener
{
//构造方法
public MyInputListener()
{
}
//保存前的处理方法
public void beforeSave()
throws Exception
{
//取得第二行第一个单元格的更新属性
INormalCell iCell = report.getCell(2, (short)1);
InputProperty ip = iCell.getInputProperty();
if (ip != null)
{
ArrayList list = ip.getUpdateList();
int listSize = list.size();
//获取更新属性集合
for (int i = 0; i < listSize; i++)
{
UpdateProperty up = (UpdateProperty)list.get(i);
//up.setMode(UpdateProperty.MODE_CUSTOM);
//up.setMode((byte)3);
TableRelations trs = (TableRelations)up.getRelation();
//设置模式名
trs.setSchema(“public”);//这里根据具体的模式名可以做到动态设置
}
}
}
//保存后的处理方法
public void afterSave(){
}
}
第三步:在展现报表的标签中增加inpuListener的属性:
<report:html name=”report1″ reportFileName=”<%=report%>”
funcBarLocation=”top”
needPageMark=”yes”
generateParamForm=”no”
params=”<%=param.toString()%>”
exceptionPage=”/reportJsp/myError2.jsp”
inpuListener=”com.runqian.input.MyInputListener “
/>
这样,在更新的时候就会首先进入到填报监听类里面,设置后模式名再进行更新。
在监听器类中可以使用session对象、request对象、response对象、报表运行环境对象、获得前端提交的数据、修改前端提交的数据,因此利用填报监听类可以检查用户登录信息、操作权限、数据有效性或其他信息,而不用额外改动报表模版,实现了批量处理的效果。