springMvc自定义视图及解析器

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

public class ChartView extends AbstractView {

    @Override
    protected void renderMergedOutputModel(Map<String, Object> map,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        JFreeChart chart=null;
        //IChart为自定义的接口规范。根据输出类型的不同调用相应的方法
        switch (((Integer)map.get(IChart.CHARTTYPE)).intValue()) {
            case IChart.BAR:chart=getChartBar(map);break;
            case IChart.PIE:break;
            default:break;
        }
        //图片的输出
        ChartUtilities.writeChartAsJPEG(response.getOutputStream(), chart, 200,200);
    }
    private JFreeChart getChartBar(Map<String, Object> map){
        JFreeChart chart = ChartFactory.createBarChart3D("产品销量图", "产品名称", "销量",
                (CategoryDataset)map.get(IChart.CHARDATASET), PlotOrientation.VERTICAL, true, true, false);
        chart.getTitle().setFont(new Font("宋体", Font.BOLD, 20));
        chart.getCategoryPlot().getDomainAxis().setTickLabelFont(new Font("宋体", Font.BOLD, 11));
        chart.getCategoryPlot().getDomainAxis().setLabelFont(new Font("黑体", Font.BOLD, 12));
        chart.getCategoryPlot().getRangeAxis().setTickLabelFont(new Font("宋体", Font.BOLD, 11));
        chart.getCategoryPlot().getRangeAxis().setLabelFont(new Font("黑体", Font.BOLD, 12));
        chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 11));
        return chart;
    }
}




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

public class ChartViewResolver extends AbstractCachingViewResolver  {
    private String chartSuffix;//后缀
    private View chartView;
      @Override
    protected View loadView(String viewName, Locale locale) throws Exception {
        View view = null;
        if (viewName.endsWith(this.getChartSuffix())){
            view =this.getChartView();
        }
        return view;
    }
    public String getChartSuffix() {
        return chartSuffix;
    }
    public void setChartSuffix(String chartSuffix) {
        this.chartSuffix = chartSuffix;
    }
    public View getChartView() {
        return chartView;
    }
    public void setChartView(View chartView) {
        this.chartView = chartView;
    }
}



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


<bean id="chartViewResolver" class="com.zhang.webapp.util.ChartViewResolver">
        <property name="chartSuffix" value=".chart"/>
        <property name="chartView">
            <bean class="com.zhang.webapp.util.ChartView"/>
        </property>
</bean>
<!--注意viewResolver应放在最后,让自定义的优先执行 -->
 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>  
        <property name="prefix" value="/pages/"/>  
        <property name="suffix" value=".jsp"/>
  </bean>


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

@RequestMapping(value="/getchart.chart",method=RequestMethod.GET)
    public String getChart(ModelMap modelMap){
         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
         dataset.addValue(510, "深圳", "苹果");  
         dataset.addValue(320, "深圳", "香蕉");  
         dataset.addValue(580, "深圳", "橘子");  
         dataset.addValue(390, "济南", "梨子");
         modelMap.addAttribute(IChart.CHARTTYPE,IChart.BAR);
         modelMap.addAttribute(IChart.CHARDATASET,dataset);
        return "webanalytics.chart";
    }
页面的代码:

<div id="tab_barChart"   style="padding:0;display:block;">
        <img id="chart_BAR" src="<c:url value='/user/getchart.chart'/>">
     </div>


结果如下图所示:


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值