ssm中iReport報表使用json數據源過程體會


 

 前言:做這個一定要有耐心,因為報表本就是數據雜糅到規整的過程,這篇心得會細講每一步操作,如果只想着一眼到位,建議close tab

 

 在公司中遇到項目,大概是一個這樣的需求,有一個列表和一個標題,需要把這些數據一條條的遍歷在報表中,然后加個標題,這些都是來自項目里的變量

 

 

 那么json格式就應該是這樣的,下面我會慢慢說,以例子說明,都會標注

 

 

 解釋:為什么是這樣,第一,報表中有固定單一屬性區域,和自動遍歷區域,如下圖,那么json的子分類肯定分為兩類

 

 

{
    "dataa": [
    {
        "country": "china"
    }, 
    
    {
        "qq": "ok"
    }, 
    
    {
        "qq": "no"
    }]
}

 

 

 圖中1.2.3步為基本配置,左邊的三個字段,dataa(json里的一級key)、qq(二級集合里的key)、country(二級集合里的key)

 

 

 

 

 

但結果往往是出人意料的,具體java代碼如下

 

 

 1     @RequestMapping(value = "/list.html")
 2     public String getOrderList(Model model) {
 3         InputStream input = new ByteArrayInputStream("\"dataa\": [{ \"country\":\"china\"},{ \"qq\":\"ok\" },{ \"qq\":\"no\" }] }".getBytes());
 4         JRDataSource jrDataSource = null;
 5         try {
 6             jrDataSource = new JsonDataSource(input, "dataa");  //第一個參數寫入json數據,第二個參數,以該節點為報表解析節點
 7         } catch (JRException e) {
 8             e.printStackTrace();
 9         }
10         // 動態指定報表模板url
11         model.addAttribute("url", "/WEB-INF/jasper/report/cod1.jasper");  //編譯好的報表文件
12         model.addAttribute("format", "pdf"); // 報表格式
13         model.addAttribute("jrMainDataSource", jrDataSource);
14         return "iReportView"; // 對應jasper-defs.xml中的bean id
15 
16     }

 

 

 注意看我的json格式,兩種類型讀在dataa : [ xx, xx ] 內

 

 按常理說,json格式 [ ] 內存放的應該是統一類型的序列集合,那么這時存放的既有遍歷的集合也有單一屬性,為什么是這樣!

 解釋:這里實際上是做了封裝,注意到集合里(指上文dataa對象里的內容,也就是[ ] 內的內容稱為集合)的每個元素都有key=>value的形式了吧,在底層,他首先會遍歷取這樣的一個集合里,根據一樣的key來判斷是否是同一類的組合,然后進行遍歷

            說白了,就是這個集合里,如果key都一致,也就是都是qq的key的話,然后報表的遍歷區里有qq這個字段,那么他就會自動遍歷集合里所有的key=qq的組合,然后渲染在報表的一行行里

             那么,你想在報表里取標題也很簡單,直接將字段以集合里的,key命名即可取出

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------

好了,接下來,就是你自己修飾報表的地方了,有什么不懂可以留言,一般常在,盡量幫你解決,伸出小手點個贊,謝謝

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM