问题描述
建立一个自定义标签,用于绘制出显示不同物品比例的柱状图,使用时如下:<h:drawRatevalue=”${map}”width=”400”height=”300”/>通过传入一个map值,用表格或div显示出最终效果。Value(map类型)Map的Key表示物质类型,为字符串类型Map的value表示该物质占有的比例,为double类型要求图按value的值降序排序,显示效果同下:Width表示图的总宽度。因为总宽度是动态设定的,所以每个品种的宽度也需要计算才能得出Height表示图的总高度。因为总高度是动态设定的,所以每个品种的高度也需要计算才能得出
解决方案
解决方案二:
靠,竟然没人给答案。
解决方案三:
新建一个tag如下:<%@tagbody-content="empty"pageEncoding="utf-8"import="java.util.*"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><%@attributename="width"type="java.lang.String"required="true"%><%@attributename="height"type="java.lang.String"required="true"%><%@attributename="value"type="java.util.Map"required="true"%><%Map<String,Double>m=(Map<String,Double>)jspContext.getAttribute("value");Set<Map.Entry<String,Double>>s=m.entrySet();List<Map.Entry<String,Double>>l=newArrayList<Map.Entry<String,Double>>(s);Collections.sort(l,newComparator<Map.Entry<String,Double>>(){publicintcompare(Map.Entry<String,Double>z1,Map.Entry<String,Double>z2){returnz2.getValue()-z1.getValue()<0?-1:(z2.getValue()-z1.getValue())==0?0:1;}});jspContext.setAttribute("list",l);%><divstyle="height:${height}"><c:forEachvar="item"items="${list}"><divstyle="float:left;marght-left:30px;margin-top:${height*(1-item.value)}px"><divstyle="background-color:red;height:${height*item.value}px;width:${width}px;"></div><div>${item.key}${item.value*100}</div></div></c:forEach></div>再新建一个jsp:<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%><%@taglibprefix="h"tagdir="/WEB-INF/tags"%><%Map<String,Double>map=newHashMap<String,Double>();map.put("苹果",0.5);map.put("梨",0.3);map.put("桔子",0.2);request.setAttribute("map",map);%><h:drawRateheight="400"width="100"value="${map}"/>
解决方案四:
楼猪结贴为0!