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 的 属性 而不是您期望的整个日期值。

您在此处访问的 属性 是 dategetDate(),其中 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