您的位置:首页 > 编程语言 > Java开发

springMVC 自定义视图及解析器

2015-05-28 22:24 453 查看
我们以jfreechart为例,自定义一个chart视图及解析器。
首先,自定义视图类ChartView,继承AbstractView, 如下:

[java] view
plaincopyprint?





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,如下

[java] view
plaincopyprint?





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文件的配置,注意视图解析器的顺序

[html] view
plaincopyprint?





<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中的数据

[java] view
plaincopyprint?





@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";  

    }  

页面的代码:

[html] view
plaincopyprint?





<div id="tab_barChart"   style="padding:0;display:block;">  

        <img id="chart_BAR" src="<c:url value='/user/getchart.chart'/>">  

     </div>  

结果如下图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: