1、需求
常见的报表均采用了freemaker的格式,那对于报表中的某个字段数据是由字符串拼接而成,而在报表中的某一行中需要将这些数据串分隔为多行数据进行分行显示,对于这种问题,我们应该如何解决?
2、方法
这个问题可大致分为两种情况。即根据字符串的拼接样式,可以有不同的解决方法以及前台展示。
a、拼接字符串为:
String str1 ="苹果 12399.00;香蕉 17000.00;火龙果 23000.00";
这种格式的字符串,用于报表在前台展示比较简单,直接在Control层使用分隔方法将字符串进行分隔,然后放入到字符串数组中即可,显示的字段名为fruit
String[] strList =str1.split(";");
//首先从后台获取到所有数据(包括fruit)
ResultVO<Map>rs= costnoticemgservice.queryTargSetByParams(params);
//项目信息表
List TargSetListData= (List)rs.getModel().get("o_ExaInfo_Cur");
if(TargSetListData != null &&TargSetListData.size() > 0){
String[] tempStr =null;
for(inti=0;i<TargSetListData.size();i++){
Map<Object,String> tempList =(Map<Object, String>) TargSetListData.get(i);
if(tempList!=null && tempList.size()>0){
String tempData =tempList.get("fruit");
//将获取的字符串数据用分隔符进行拆分
tempStr =tempData.split(";");
map.put("prolistdoc",tempStr);//表示专业部门目标框的换行数据
}
}
map.put("targsetlistdoc", TargSetListData);
}else{
map.put("targsetlistdoc",null);
}
在freemaker模板中如下修改:
<tdcolspan="3" style="text-align:left;color:#000080;">
<#list prolistdoc! as subinfo>
<#assign sqlno = subinfo_index+1>
${sqlno}、${subinfo}<br/>
</#list>
</td>
b、拼接字符串为:
String str1 ="苹果:12399.00;香蕉:17000.00;火龙果:23000.00";
这种格式的字符串,相较于上述情况稍微复杂一些,直接在Control层使用分隔方法将字符串进行两次分隔,放入到字符串数组中即可,显示的字段名为fruit
String[] strList = str1.split(";");//第一次分隔
String[] strList = str1.split(";");//第二次分隔
//首先从后台获取到所有数据(包括fruit)
ResultVO<Map>rs= costnoticemgservice.queryTargSetByParams(params);
List DesBomListData= (List)rs.getModel().get("o_ExaInfo_Cur");
if(DesBomListData!= null && DesBomListData.size() > 0){
map.put("desbomlistdoc",DesBomListData);
//并从DesBomListData 获取fruit字段
Map<Object,String> tempList =(Map<Object, String>) TargSetListData.get(i);
if(tempList !=null &&tempList.size()>0){
String tempData = tempList.get("fruit");
String[] strList = str.split(";");
String[] recordStr = null;
for(inti=0;i<srcList.length;i++){//行数据
String tempStr=srcList[i];
recordStr =tempStr.split(":");
// String deptName=recordStr[0];
// String price=recordStr[1];
map.put("prolistdoc", recordStr);//表示专业部门目标框的换行数据
}
}
map.put("targsetlistdoc", TargSetListData);
}else{
map.put("targsetlistdoc",null);
}
在freemaker模板中如下修改:
<tdcolspan="3" style="text-align:left;color:#000080;">
<#list prolistdoc! as deptinfo>
${deptinfo[0]} ${deptinfo[1]}<br/>
</#list>
</td>
在这种需要分隔两次的情况下,其实还存在另外一种方法解决,那就是当第二次分隔时,直接使用replace()方法之后,后面的步骤同情况a的后续步骤一样。