В моем веб-приложении объект клиента имеет поля, связанные с информацией о кредитной карте
public class Customer {
...
private String ccType;
private Date ccExpirationDate;
...
}
На странице jsp я предоставляю раскрывающиеся списки для выбора типа кредитной карты, месяца истечения срока действия, года истечения срока действия.Я хочу проверить, существует ли клиент в сеансе, и если это так, его части кредитной карты и месяц, год и части срока действия соответствуют любому из параметров в раскрывающемся списке, тогда эти параметры отображаются как выбранные.
В contextInitialized() метод класса, реализующего ServletContextListener, я создал карты, как показано ниже.
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);
Я пробовал это.
<tr>
<td>
<select id="creditCardType" title="select card type" name="creditCardType">
<c:forEach var="cctype" items="${cctypes }">
<option ${not empty customer and customer.ccType == cctype.key ? 'selected':'' } value="${cctype.key }">${cctype.value }</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td>Expiration Date</td>
<td>
<select id="cardexpiryMonth" name="cardexpiryMonth">
<c:forEach var="ccmonth" items="${ccmonths }">
<option ${not empty customer and customer.ccExpirationDate.month == ccmonth.key ? 'selected':'' } value="${ccmonth.key }">${ccmonth.value }</option>
</c:forEach>
</select>
</td>
<td>
<select id="cardexpiryYear" name="cardexpiryYear">
<c:forEach var="ccyear" items="${ccyears }">
<option ${not empty customer and customer.ccExpirationDate.year == ccyear.key ? 'selected':'' } value="${ccyear.key }">${ccyear.value }</option>
</c:forEach>
</select>
</td>
</tr>
Это работает для типа кредитной карты, которая отображается как карточка клиентавыбранный тип. Но месяц и год истечения срока действия клиента не отображаются. Не удалось ли выполнить сравнение внутри строки? Есть ли способ исправить эту проблему?
(я знаю util.Date's getMonth (), getYear () устарела ... но не мог придумать другого способа сделать это, используя EL)
любая помощь оценена
спасибо
оценка