2016-11-27 61 views
0

我对JSF,Java Beans和JPQL相当陌生。我有2个嵌套的c:forEach标签。每个DISTINCT日期的第一个循环,在该日期每个'时间段'的第二个循环。Java Bean和JSF格式日期列表

<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 - listedDates

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 GMT 2015年,3月11日星期三00:00:00 GMT,2015年4月11日星期六00:00:00 BST 2015]

但是,#{d.date}显示“11”。此错误发生在将d.date传递到listedTimeslots。

无法将类型类java.lang.Integer中的11类java.util.Date

我需要从[周三年02月11日00:00:00 GMT 2015年]来格式化日期列表[YYYY-MM-DD](这也是如何显示在数据库中),任何人都可以给我任何指针?谢谢!

+0

你尝试JSF转换器? –

+0

是的,我尝试了''第二遍forEach,但没有显示数据。 – onlyMemes

+0

如何铸造你的结果集,我不(T认为你是从数据库中接收日期 –

回答

0

问题是你如何ADRESSE您的bean属性。

当您使用#{d.date}时,您告诉您的bean访问java.util.Date的属性,而不是您期望的整个日期值。

您正在访问这里的属性是date通过getDate()返回该月的天数是有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

+0

和修改,以''和它完美的作品,非常感谢你的人。把我惹火了几个小时哈哈 – onlyMemes

+0

它的工作?(我试图复制你的全部代码。) –

+0

是的,完美的。我并不需要指定'#{ d.date}'。再次感谢! – onlyMemes