我正在使用bootstrap中的日期选择器,无论我选择哪个日期,月份的输出都是1月。
reports.jsp
<%@ include file="/WEB-INF/template/taglibs.jsp"%>
<div class="container">
<%@ include file="/WEB-INF/jsp/login/menu.jsp" %>
<form:form commandName="submitForm" method="post"
class="form-horizontal form-width addbtn">
<fieldset>
<legend>Generate ${type} report</legend>
<input class="hidden" type="text" hidden="true"
name="id" value="${param.id}" />
<div class="form-group">
<label for="date-picker-2" class="col-lg-2 control-label">Start date</label>
<div class="col-lg-10 controls">
<div class="input-group date-picker-2">
<input id="date-picker-1" type="text" name="startDate"
class="date-picker form-control" /> <label for="date-picker-1"
class="input-group-addon btn"><span
class="glyphicon glyphicon-calendar"></span> </label>
</div>
</div>
</div>
<div class="form-group">
<label for="date-picker-2" class="col-lg-2 control-label">End date</label>
<div class="col-lg-10 controls">
<div class="input-group date-picker-2">
<input id="date-picker-2" type="text" name="endDate"
class="date-picker form-control" /> <label for="date-picker-2"
class="input-group-addon btn"><span
class="glyphicon glyphicon-calendar"></span> </label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<button type="submit" class="btn btn-warning">Submit</button>
</div>
</div>
</fieldset>
</form:form>
</div>
<script type="text/javascript">
$(".date-picker").datepicker({
format : 'yyyy-mm-dd'
});
$('.datepicker tbody').on('click', function(){ $('.datepicker').hide()});
</script>
layout.jsp
<%@ include file="taglibs.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><tiles:insertAttribute name="title" ignore="true" /></title>
<link rel="stylesheet"
href="<c:url value="/bootstrap/css/bootstrap.min.css"/>"
type="text/css" />
<link rel="stylesheet"
href="<c:url value="/bootstrap/datepicker/css/datepicker.css"/>"
type="text/css" />
<link rel="stylesheet" href="<c:url value="/css/basic.css"/>"
type="text/css" />
<script type="text/javascript"
src="<c:url value="/js/jquery-1.11.0.js"/>"></script>
<script type="text/javascript"
src="<c:url value="/bootstrap/datepicker/js/bootstrap-datepicker.js"/>"></script>
<script type="text/javascript"
src="<c:url value="/bootstrap/js/bootstrap.min.js"/>"></script>
</head>
<body>
<tiles:insertAttribute name="header" />
<tiles:insertAttribute name="body" />
<tiles:insertAttribute name="footer" />
</body>
</html>
ReportsController.java
package catering.web.controller;
import java.sql.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.apache.log4j.Logger;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import catering.web.data_access.DetailedReportDataAccess;
import catering.web.data_access.OrderReportDataAccess;
import catering.web.model.DetailedReport;
import catering.web.model.OrderReport;
import catering.web.view_model.ReportViewModel;
@Controller
public class ReportsController {
protected static Logger logger = Logger.getLogger("controller");
@RequestMapping(value="reports", method = RequestMethod.GET)
public String reportsGet(@RequestParam int id, Model model, Authentication authentication){
logger.debug("Received request to show reports page(GET)");
model.addAttribute("username", "Welcome " + authentication.getPrincipal() + "!");
switch(id){
case 1:
model.addAttribute("type", "detailed");
break;
case 2:
model.addAttribute("type", "final");
break;
case 3:
model.addAttribute("type", "orders");
break;
}
return "reports";
}
@RequestMapping(value = "reports", method = RequestMethod.POST)
public ModelAndView fullReport(@ModelAttribute("submitForm") ReportViewModel reportData, ModelAndView model){
logger.debug("Received request to download PDF report");
Date sqlStartDate = new Date(reportData.getStartDate().getTime());
Date SqlEndDate = new Date(reportData.getEndDate().getTime());
switch(reportData.getId()){
case 1:
List<DetailedReport> reports = DetailedReportDataAccess.getDetailedReport();
JRDataSource dataSource1 = new JRBeanCollectionDataSource(reports);
Map<String, Object> parameterMap1 = new HashMap<String, Object>();
parameterMap1.put("datasource", dataSource1);
model = new ModelAndView("detailedReport", parameterMap1);
break;
case 2:
List<OrderReport> orders = OrderReportDataAccess.getFinalOrder(sqlStartDate,SqlEndDate);
System.out.println(orders.size());
JRDataSource dataSource2 = new JRBeanCollectionDataSource(orders);
Map<String,Object> parameterMap2 = new HashMap<String,Object>();
parameterMap2.put("datasource", dataSource2);
model = new ModelAndView("finalReport1", parameterMap2);
break;
case 3:
break;
}
return model;
}
}
ReportViewModel.java
package catering.web.view_model;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
public class ReportViewModel {
@DateTimeFormat(pattern = "yyyy-mm-dd")
private Date startDate;
@DateTimeFormat(pattern = "yyyy-mm-dd")
private Date endDate;
private int id;
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}