springMVC自定义视图解析器和视图

我们以jfreechart为例,自定义一个chart视图及解析器。
首先,自定义视图类ChartView,继承AbstractView, 如下:

[java]  view plain  copy
  1. public class ChartView extends AbstractView {  
  2.   
  3.     @Override  
  4.     protected void renderMergedOutputModel(Map<String, Object> map,  
  5.             HttpServletRequest request, HttpServletResponse response)  
  6.             throws Exception {  
  7.         JFreeChart chart=null;  
  8.         //IChart为自定义的接口规范。根据输出类型的不同调用相应的方法  
  9.         switch (((Integer)map.get(IChart.CHARTTYPE)).intValue()) {  
  10.             case IChart.BAR:chart=getChartBar(map);break;  
  11.             case IChart.PIE:break;  
  12.             default:break;  
  13.         }  
  14.         //图片的输出  
  15.         ChartUtilities.writeChartAsJPEG(response.getOutputStream(), chart, 200,200);  
  16.     }  
  17.     private JFreeChart getChartBar(Map<String, Object> map){  
  18.         JFreeChart chart = ChartFactory.createBarChart3D("产品销量图""产品名称""销量",  
  19.                 (CategoryDataset)map.get(IChart.CHARDATASET), PlotOrientation.VERTICAL, truetruefalse);  
  20.         chart.getTitle().setFont(new Font("宋体", Font.BOLD, 20));  
  21.         chart.getCategoryPlot().getDomainAxis().setTickLabelFont(new Font("宋体", Font.BOLD, 11));  
  22.         chart.getCategoryPlot().getDomainAxis().setLabelFont(new Font("黑体", Font.BOLD, 12));  
  23.         chart.getCategoryPlot().getRangeAxis().setTickLabelFont(new Font("宋体", Font.BOLD, 11));  
  24.         chart.getCategoryPlot().getRangeAxis().setLabelFont(new Font("黑体", Font.BOLD, 12));  
  25.         chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 11));  
  26.         return chart;  
  27.     }  
  28. }  


自定义视图解析器ChartViewResolver,继承AbstractCachingViewResolver,如下

[java]  view plain  copy
  1. public class ChartViewResolver extends AbstractCachingViewResolver  {  
  2.     private String chartSuffix;//后缀  
  3.     private View chartView;  
  4.       @Override  
  5.     protected View loadView(String viewName, Locale locale) throws Exception {  
  6.         View view = null;  
  7.         if (viewName.endsWith(this.getChartSuffix())){  
  8.             view =this.getChartView();  
  9.         }  
  10.         return view;  
  11.     }  
  12.     public String getChartSuffix() {  
  13.         return chartSuffix;  
  14.     }  
  15.     public void setChartSuffix(String chartSuffix) {  
  16.         this.chartSuffix = chartSuffix;  
  17.     }  
  18.     public View getChartView() {  
  19.         return chartView;  
  20.     }  
  21.     public void setChartView(View chartView) {  
  22.         this.chartView = chartView;  
  23.     }  
  24. }  



dispacher-servlet.xml文件的配置,注意视图解析器的顺序


[html]  view plain  copy
  1. <bean id="chartViewResolver" class="com.zhang.webapp.util.ChartViewResolver">  
  2.         <property name="chartSuffix" value=".chart"/>  
  3.         <property name="chartView">  
  4.             <bean class="com.zhang.webapp.util.ChartView"/>  
  5.         </property>  
  6. </bean>  
  7. <!--注意viewResolver应放在最后,让自定义的优先执行 -->  
  8.  <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  9.         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>    
  10.         <property name="prefix" value="/pages/"/>    
  11.         <property name="suffix" value=".jsp"/>  
  12.   </bean>  


控制层的代码,注意ChartView内的Map中的数据,就是这里modelMap中的数据

[java]  view plain  copy
  1. @RequestMapping(value="/getchart.chart",method=RequestMethod.GET)  
  2.     public String getChart(ModelMap modelMap){  
  3.          DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
  4.          dataset.addValue(510"深圳""苹果");    
  5.          dataset.addValue(320"深圳""香蕉");    
  6.          dataset.addValue(580"深圳""橘子");    
  7.          dataset.addValue(390"济南""梨子");  
  8.          modelMap.addAttribute(IChart.CHARTTYPE,IChart.BAR);  
  9.          modelMap.addAttribute(IChart.CHARDATASET,dataset);  
  10.         return "webanalytics.chart";  
  11.     }  
页面的代码:

[html]  view plain  copy
  1. <div id="tab_barChart"   style="padding:0;display:block;">  
  2.         <img id="chart_BAR" src="<c:url value='/user/getchart.chart'/>">  
  3.      </div>  


结果如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值