新項目老大要求用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真的是個很好用的工具,做出來的界面快捷,好看,雖然我現在碰到了很多坑,但是接受哪個新事件不是先從坑開始的呢,有坑不要緊,爬出來就行了。小菜鳥學的東西還很多,一步一坑吧,平常心,平常心。
