2012-05-02 44 views
7

我有以下標籤:JSTL - 使用formatDate用的java.sql.Timestamp

<%@ tag body-content="empty"%> 
<%@ attribute name="timestamp" required="true" type="java.sql.Timestamp"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 
<jsp:useBean id="dateValue" class="java.util.Date" /> 
<c:if test="${not empty timestamp}"> 
    <jsp:setProperty name="dateValue" property="time" value="${timestamp}" /> 
    <span title="${timestamp}"> <fmt:formatDate value="${dateValue}" 
      pattern="MM/dd/yyyy HH:mm" /> </span> 
</c:if> 

我得到不過以下錯誤:

錯誤500:com.ibm.ws .jsp.JspCoreException:java.lang.IllegalArgumentException異常:不能12年5月1日上午10:36型類java.sql.Timestamp中的轉換爲長

我試圖按照this answer轉換添estamp到JSTL的日期,所以我不會在我的servlet中改變任何東西。如何使用JSTL將java.sql.Timestamp轉換爲一個日期,以便formatDate可以使用它?

回答

9

您需要通過Timestamp#getTime()

<jsp:setProperty name="dateValue" property="time" value="${timestamp.time}" /> 

但是這一切都沒有意義。 java.sql.Timestamp已經是java.util.Date的一個子類。所以這也應該這樣做:

<%@ attribute name="timestamp" required="true" type="java.sql.Timestamp"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 
<c:if test="${not empty timestamp}"> 
    <span title="${timestamp}"><fmt:formatDate value="${timestamp}" 
      pattern="MM/dd/yyyy HH:mm" /></span> 
</c:if> 

我順便也改變你的模式,以財產申報爲java.util.Date代替。您不應在模型和視圖中使用java.sql.Timestamp,而只能在數據層中使用java.sql.Timestamp。您不需要通過解析/格式將ResultSet#getTimestamp()轉換爲java.util.Date。只需要上傳就足夠了。

E.g.

import java.util.Date; 

public class SomeModel { 

    private Date somefield; 

    // ... 
} 

someModel.setSomefield(resultSet.getTimestamp("somefield")); 
+0

哦,DERP。我從來沒有嘗試直接在時間戳上使用'formatDate',因爲我在網上看到了有關必須將時間戳轉換爲日期以便與'formatDate'一起使用的問題。謝謝! –

+0

其他問題正在討論時間戳,就像在表示曆元時間的「long」值中一樣。但是實際上你已經擁有了一個'java.sql.Timestamp',而這個''java.atil.Date''已經是一個子類了。 – BalusC