Java Bean 和 JSF 格式化日期列表
Java Bean & JSF formatting List of Dates
我对 JSF、Java Beans 和 JPQL 相当陌生。我有 2 个嵌套的 c:forEach 标签。第一个循环针对每个 DISTINCT 日期,第二个循环针对该日期的每个 'timeslot'。
<c:forEach var="d" items="#{bean.listedDates(1)}" >
#{d.date} <!-- this displays '11' -->
<ui:decorate template="template for day" />
<c:forEach var="item" items="#{bean.listedTimeslots(1, d.date)}">
<ui:decorate template="template for time-slot row" />
</c:forEach>
</c:forEach>
bean.java - 上市日期
public List<Date> listedDates(int idPass) {
List<Date> dateQueue = em.createQuery("SELECT DISTINCT l.date FROM table1 l WHERE l.id = :id")
.setParameter("id", idPass)
.getResultList();
System.out.println("DATES DISPLAYED BELOW");
System.out.print(dateQueue);
return dateQueue;
}
控制台
信息:日期显示如下
信息:[2 月 11 日星期三 00:00:00 2015 年格林威治标准时间,3 月 11 日星期三 00:00:00 2015 年格林威治标准时间,4 月 11 日星期六 00:00:00 BST 2015]
但是,#{d.date} 显示“11”。并且在将 d.date 传递到 listedTimeslots 时发生此错误。
无法将 class java.lang.Integer 类型的 11 转换为 class java.util.Date
我需要将我的日期列表从 [Wed Feb 11 00:00:00 GMT 2015] 格式化为 [YYYY-MM-DD](这也是它在数据库中的显示方式),谁能给我任何指针?谢谢!
问题是你如何处理你的 bean 属性。
当您使用 #{d.date}
时,您是在告诉您的 bean 访问 java.util.Date
的 属性 而不是您期望的整个日期值。
您在此处访问的 属性 是 date
到 getDate()
,其中 returns 一个月中的第几天 int
作为根据 java.util.Date
的 Java 6 文档键入,我认为您正在使用它来编译和 运行 此代码。
要解决此问题,您需要更改以下 EL:
使用#{d}
代替#{d.date}
您的代码应如下所示:
<c:forEach var="d" items="#{bean.listedDates(1)}" >
#{d} <!-- changed-->
<ui:decorate template="template for day" />
<c:forEach var="item" items="#{bean.listedTimeslots(1, d)}"> <!-- changed-->
<ui:decorate template="template for time-slot row" />
</c:forEach>
</c:forEach>
参考文献:
http://docs.oracle.com/javase/6/docs/api/java/util/Date.html
我对 JSF、Java Beans 和 JPQL 相当陌生。我有 2 个嵌套的 c:forEach 标签。第一个循环针对每个 DISTINCT 日期,第二个循环针对该日期的每个 'timeslot'。
<c:forEach var="d" items="#{bean.listedDates(1)}" >
#{d.date} <!-- this displays '11' -->
<ui:decorate template="template for day" />
<c:forEach var="item" items="#{bean.listedTimeslots(1, d.date)}">
<ui:decorate template="template for time-slot row" />
</c:forEach>
</c:forEach>
bean.java - 上市日期
public List<Date> listedDates(int idPass) {
List<Date> dateQueue = em.createQuery("SELECT DISTINCT l.date FROM table1 l WHERE l.id = :id")
.setParameter("id", idPass)
.getResultList();
System.out.println("DATES DISPLAYED BELOW");
System.out.print(dateQueue);
return dateQueue;
}
控制台
信息:日期显示如下
信息:[2 月 11 日星期三 00:00:00 2015 年格林威治标准时间,3 月 11 日星期三 00:00:00 2015 年格林威治标准时间,4 月 11 日星期六 00:00:00 BST 2015]
但是,#{d.date} 显示“11”。并且在将 d.date 传递到 listedTimeslots 时发生此错误。
无法将 class java.lang.Integer 类型的 11 转换为 class java.util.Date
我需要将我的日期列表从 [Wed Feb 11 00:00:00 GMT 2015] 格式化为 [YYYY-MM-DD](这也是它在数据库中的显示方式),谁能给我任何指针?谢谢!
问题是你如何处理你的 bean 属性。
当您使用 #{d.date}
时,您是在告诉您的 bean 访问 java.util.Date
的 属性 而不是您期望的整个日期值。
您在此处访问的 属性 是 date
到 getDate()
,其中 returns 一个月中的第几天 int
作为根据 java.util.Date
的 Java 6 文档键入,我认为您正在使用它来编译和 运行 此代码。
要解决此问题,您需要更改以下 EL:
使用#{d}
代替#{d.date}
您的代码应如下所示:
<c:forEach var="d" items="#{bean.listedDates(1)}" >
#{d} <!-- changed-->
<ui:decorate template="template for day" />
<c:forEach var="item" items="#{bean.listedTimeslots(1, d)}"> <!-- changed-->
<ui:decorate template="template for time-slot row" />
</c:forEach>
</c:forEach>
参考文献:
http://docs.oracle.com/javase/6/docs/api/java/util/Date.html