JSTL - 将formatDate与java.sql.Timestamp一起使用

时间:2012-05-02 15:31:55

标签: java servlets timestamp jstl jsp-tags

我有以下标签:

<%@ 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:无法将类型为java.sql.Timestamp的5/1/12 10:36 AM转换为long

我试图按照this answer将时间戳转换为JSTL中的日期,所以我不会在servlet中更改任何内容。如何使用JSTL将java.sql.Timestamp转换为日期以便formatDate可以使用它?

1 个答案:

答案 0 :(得分: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,而只能在数据层中使用ResultSet#getTimestamp()。您无需通过解析/格式转换java.util.Dateimport java.util.Date; public class SomeModel { private Date somefield; // ... } 。只是向上转换就足够了。

E.g。

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

{{1}}