新项目老大要求用finereport,当时真的是一头meng,第一次听说,用就用吧,前辈的话肯定是没错的。就开始上网看资料,老大带着走了一遍demo,就开始上手了,几天下来,发现真的太好用了,除了刚开始跟项目做整合的时候费了牛劲。现总结如下:
1:jfinal框架的拦截器会把所有servlet全部拦截掉,造成finereport的/ReportSevlet访问不到,经过小伙伴们的努力,终于解决,解决步骤如下:
(1)首先新写一个handler类
public class FineReportHandler extends Handler { @Override public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) { // 对于非静态文件,和非指定排除的url实现过滤 //我这里过滤的是资源文件和网站后台 //需要过滤哪个servlet就添加哪个 if (target.startsWith("/ReportServer")) { return ; } next.handle(target, request, response, isHandled); } }
(2)然后在config 中加入handler
@Override public void configHandler(Handlers me) { me.add(new ContextPathHandler("ctx")); me.add(new FineReportHandler()); }
这样一来就把finereport需要的servlet放开了,问题解决,另外web.xml 中关于finereport的配置如下
<servlet> <servlet-name>ReportServer</servlet-name> <servlet-class>com.fr.web.ReportServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ReportServer</servlet-name> <url-pattern>/ReportServer</url-pattern> </servlet-mapping>
2:finereport填报模式下,显示更新成功,数据库却一直没有更新内容,解决如下:
在设置报表填报属性时,提交类型选择智能提交,选择未修改不更新,然后,最重要的是,一定要给表设置主键,一定要设置主键,否则还可能会造成违反数据表唯一原则(主键重复原因)
3、由于finereport涉及很多数据库的操作,往往有时候出错了却不知道错误在哪儿,这时候就应该用上finereport的日志了,默认情况下,日志也只是显示个错误,执行的sql语句并不显示,这时候,在文件选项中选择日志的级别设置为DEBUG就可以了。
4、finereport多报表只需注意几点,模板web属性——》为该模板单独设置,设置工具栏等等,最重要的是设置只提交当前sheet,
另外还可以给每个模板添加各种事件js,等等等。
总结就到这里,总而言之,finereport真的是个很好用的工具,做出来的界面快捷,好看,虽然我现在碰到了很多坑,但是接受哪个新事件不是先从坑开始的呢,有坑不要紧,爬出来就行了。小菜鸟学的东西还很多,一步一坑吧,平常心,平常心。