遇到客户在使用defineBean时,也就是用这样的标签方式,
<report:html name="reportfile1"
srcType="defineBean"
beanName="reportDefine",
第一次内容是正确的,后面无论操作几次都是第一次的内容了。
我们先来看看defineBean方式发布和reportBean方式发布的区别,两者的相同点很好理解,都需要把raq文件转换成ReportDefine对象,进行相应的处理。而不同点,就是前者是计算之前的报表模板,后者是计算好的报表结果。由于defineBean是没有进行计算的报表对象,那么在definebean方式发布的时候,就需要计算,那么运算的环境如果我们需要让他发生变化的话,那么我们要把这个改变了的context也传递过去,也就是在srcType="defineBean"
beanName="reportDefine"
的基础上,可能需要加上
contextName=”myContext”
当然这需要
request.setAttribute("reportDefine",rd);
request.setAttribute( “myContext”, context );
这两句做基础。
那么客户遇到这种问题的解决方案就是在jsp页面加上下面这段
String rptName = "RPT_"+Double.toString(Math.random());
request.setAttribute(rptName,rd);
%>
<report:html name="report1"
srcType="defineBean"
beanName="<%=rptName%>"
/>