public String convertDisplayDate(Date date) {
int month = date.getMonth();
String convertedDate = "";
switch (month) {
case 1:
convertedDate += "January ";
break;
case 2:
convertedDate += "February ";
break;
case 3:
convertedDate += "March ";
break;
case 4:
convertedDate += "April ";
break;
case 5:
convertedDate += "May ";
break;
case 6:
convertedDate += "June ";
break;
case 7:
convertedDate += "July ";
break;
case 8:
convertedDate += "August ";
break;
case 9:
convertedDate += "September ";
break;
case 10:
convertedDate += "October ";
break;
case 11:
convertedDate += "November ";
break;
case 12:
convertedDate += "December ";
break;
}
convertedDate += String.valueOf(date).substring(0,4);
return convertedDate;
}
我第一次以JSF形式调用它时工作:
#{candidateController.convertDisplayDate(candidateController.candidateDetail.preference.availableFrom)}
然而,问题发生在我再次打电话但是使用ui:repeat
循环变量时:
#{candidateController.convertDisplayDate(e.fromTime)}
使用我的循环变量。 我有一个例外告诉我: noMethodFound:candidateController.convertDisplayDate(java.sql.Date),而我的签名是java.util.Date,我检查了所有实体都在java.util中使用相同的类Date。 所以我不得不为这些案例写一个新方法:
public String convertDisplaySQLDate(java.sql.Date date) {
int month = date.getMonth();
String convertedDate = "";
switch (month) {
case 1:
convertedDate += "January ";
break;
case 2:
convertedDate += "February ";
break;
case 3:
convertedDate += "March ";
break;
case 4:
convertedDate += "April ";
break;
case 5:
convertedDate += "May ";
break;
case 6:
convertedDate += "June ";
break;
case 7:
convertedDate += "July ";
break;
case 8:
convertedDate += "August ";
break;
case 9:
convertedDate += "September ";
break;
case 10:
convertedDate += "October ";
break;
case 11:
convertedDate += "November ";
break;
case 12:
convertedDate += "December ";
break;
}
convertedDate += String.valueOf(date).substring(0,4);
return convertedDate;
}
它的工作原理,但我需要知道为什么我得到这个异常,是因为ui:repeat
日期以某种方式转换为java.sql.Date?
能不能给我一个解释和谢谢。
答案 0 :(得分:4)
这不是由JSF引起的。这是由EL(负责解析和评估那些#{}
事物的框架)引起的。在较旧的EL实现中,方法签名必须与参数类型完全匹配。它不检查超类。您最好的尝试是升级或替换正在使用的EL实现。
尽管如此,整个方法都是不必要的。扔掉那些维护不友好的垃圾,只使用内置日期转换器:
<h:outputText value="#{bean.date}">
<f:convertDateTime pattern="MMMM yyyy" locale="en_US" />
</h:outputText>
就是这样。
它正在使用java.text.SimpleDateFormat
。您可以在javadoc中找到模式。