Jsp 比较下拉列表中util.Date的月份、年份部分

Jsp 比较下拉列表中util.Date的月份、年份部分,jsp,drop-down-menu,comparison,el,Jsp,Drop Down Menu,Comparison,El,在我的web应用程序中,客户对象具有与信用卡信息相关的字段 public class Customer { ... private String ccType; private Date ccExpirationDate; ... } 在jsp页面中,我提供了下拉列表来选择信用卡类型、到期月份、到期年份。 我想检查客户是否存在于会话中,如果存在,则其信用卡类型和到期日期的月、年部分与下拉列表中的任何选项匹配,然后这些选项显示为选中 在实现ServletConte

在我的web应用程序中,客户对象具有与信用卡信息相关的字段

public class Customer {
    ...
    private String ccType;
    private Date ccExpirationDate;
    ...
}
在jsp页面中,我提供了下拉列表来选择信用卡类型、到期月份、到期年份。 我想检查客户是否存在于会话中,如果存在,则其信用卡类型和到期日期的月、年部分与下拉列表中的任何选项匹配,然后这些选项显示为选中

在实现ServletContextListener的类的contextInitialized()方法中,我创建了如下映射

Map<String,String> cardtypes = new TreeMap<String,String>();
        cardtypes.put("M0", "MasterCard");
        cardtypes.put("D0", "Discover");
...
Map<String,String> expiryMonths = new TreeMap<String,String>();
        expiryMonths.put("01", "January");
        expiryMonths.put("02", "February");
...
Map<String,String> expiryYears = new TreeMap<String,String>();
for(int i=2011;i<2030;i++){
            String year = Integer.toString(i+1);
            expiryYears.put(year,year);
        }
...
sc.setAttribute("ccyears", expiryYears);
sc.setAttribute("ccmonths", expiryMonths);
sc.setAttribute("cctypes", cardtypes);
Map cardtypes=new TreeMap();
卡片类型。放入(“M0”、“万事达卡”);
cardtypes.put(“D0”、“Discover”);
...
Map expiryMonths=new TreeMap();
到期月份认沽期权(“01”、“1月”);
到期月份认沽权证(“02”、“2月”);
...
Map expiryYears=newtreemap();

对于(int i=2011;i关于月份,有两个原因:

  • 以0为基础。一月为0,二月为1,以此类推
  • 您已将月份映射键前缀为0。01的值与1不同。因此,在下拉选项“十月”和“十一月”中,它仅与十一月和十二月的月份匹配
多年来,有一个原因:

  • 是基于1900的。2011返回111,2012返回112,等等。111的值与2011不同,因此它永远不会匹配
因此,请相应地修改代码:

    expiryMonths.put("1", "January");
    expiryMonths.put("2", "February");
    // ...
在艾尔

 (customer.ccExpirationDate.month + 1) == ccmonth.key

(您现在可能会更好地理解为什么
Date
是一个彻底的epic失败,并被弃用)

 (customer.ccExpirationDate.month + 1) == ccmonth.key
 (customer.ccExpirationDate.year + 1900) == ccyear.key