控制台显示Unexpected Exception caught setting 'year' on 'class cn.itcast.nsfw.complain.action.ComplainAction: Error setting expression 'year' with value ['2016', ]
但是程序运行正常,可以生成统计图表代码如下
JSP代码:
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

//获取当前年份
Calendar cal = Calendar.getInstance();
int curYear = cal.get(Calendar.YEAR);//当前年份
request.setAttribute("curYear", curYear);

List yearList = new ArrayList();
for(int i = curYear; i > curYear-5 ; i--){
yearList.add(i);
}
request.setAttribute("yearList", yearList);
%><!DOCTYPE HTML>
<html>
  <head>
    <%@include file="/common/header.jsp"%>
    <title>年度投诉统计图</title>
  </head>
  <script type="text/javascript" src="${basePath }js/fusioncharts/fusioncharts.js"></script>
  <script type="text/javascript" src="${basePath }js/fusioncharts/fusioncharts.charts.js"></script>
  <script type="text/javascript" src="${basePath }js/fusioncharts/themes/fusioncharts.theme.fint.js"></script>
  <script type="text/javascript">
  
  //加载完dom元素后,执行
  $(document).ready(doAnnualStatistic());
  
  //根据年份统计投诉数
  function doAnnualStatistic(){
  //1、获取年份
  var year = $("#year option:selected").val();
  if(year == "" || year == undefined){
  year = "${curYear}";//默认当前年份
  }
  //2、根据年份统计
  $.ajax({
  url:"${basePath }/nsfw/complain_getAnnualStatisticData.action",
  data:{"year":year},
  type: "post",
  dataType:"json",
  success: function(data){
  if(data != null && data != "" && data != undefined){
  var revenueChart = new FusionCharts({
        "type": "line",
        "renderAt": "chartContainer",
        "width": "600",
        "height": "400",
        "dataFormat": "json",
        "dataSource":  {
          "chart": {
            "caption": year + " 年度投诉数统计图",
            "xAxisName": "月  份",
            "yAxisName": "投  诉  数",
            "theme": "fint"
         },
         "data": data.chartData
      }   });
revenueChart.render();
  } else {
  alert("统计投诉数失败!");
  }
  },
  error: function(){alert("统计投诉数失败!");}
  });
  
  }
 
  </script>
  <body>
   <br>
    <div style="text-align:center;width:100%;"><s:select id="year" list="#request.yearList" onchange="doAnnualStatistic()"></s:select></div>
    <br>
    <div id="chartContainer" style="text-align:center;width:100%;"></div>
  </body>
</html>action,service dao层year可以正常接收
action代码如下
  //根据年份统计投诉数
public String getAnnualStatisticData(){
//1、获取年份
HttpServletRequest request = ServletActionContext.getRequest();
int year = 0;
if(request.getParameter("year") != null){
year = Integer.valueOf(request.getParameter("year"));
} else {
//默认 当前年份
year = Calendar.getInstance().get(Calendar.YEAR);
}

//2、获取统计年度的每个月的投诉数
statisticMap = new HashMap<String, Object>();
statisticMap.put("msg", "success");
statisticMap.put("chartData", complainService.getAnnualStatisticDataByYear(year));
return "annualStatisticData";

serviceimpl代码如下
  //根据年份统计投诉数
@Override
public List<Map> getAnnualStatisticDataByYear(int year) {
List<Map> resList = new ArrayList<Map>();
//1、获取统计数据
List<Object[]> list = complainDao.getAnnualStatisticDataByYear(year);
if(list != null && list.size()>0){
Calendar cal = Calendar.getInstance();
//是否当前年份
boolean isCurYear = (cal.get(Calendar.YEAR) == year);
int curMonth = cal.get(Calendar.MONTH)+1;//当前月份
//2、格式化统计结果
int temMonth = 0;
Map<String, Object> map = null;
for(Object[] obj: list){
temMonth = Integer.valueOf((obj[0])+"");
map = new HashMap<String, Object>();
map.put("label", temMonth+ " 月");
if(isCurYear){//当前年份
//当前年份:如果月份已过的则直接取投诉数并且值为空或null时则设为0;如果月份未过的则全部投诉数置空
if(temMonth > curMonth){//未到月份,则投诉数为空
map.put("value", "");
} else {//已过月份
map.put("value", obj[1]==null?"0":obj[1]);
}
} else {//非当前年份则直接取投诉数并且值为空或null时则设为0
map.put("value", obj[1]==null?"0":obj[1]);
}
resList.add(map);
}
}
return resList;

daoimpl代码如下
 @Override
public List<Object[]> getAnnualStatisticDataByYear(int year) {
StringBuffer sb = new StringBuffer();
sb.append("SELECT imonth, COUNT(comp_id)")
.append(" FROM tmonth LEFT JOIN complain ON imonth=MONTH(comp_time)")
.append(" AND YEAR(comp_time)=?")
.append(" GROUP BY imonth ")
.append(" ORDER BY imonth");
SQLQuery sqlQuery = getSession().createSQLQuery(sb.toString());
sqlQuery.setParameter(0, year);
return sqlQuery.list();

一直无法解决,请各位帮忙查找问题在哪里?