2016-11-27 84 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