2012-05-02 42 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