7

我有一个带有以下内容的标签:

<%@ 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 转换为 long

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

4

1 回答 1

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.Date只需向上转换就足够了。

例如

import java.util.Date;

public class SomeModel {

    private Date somefield;

    // ...
}

someModel.setSomefield(resultSet.getTimestamp("somefield"));
于 2012-05-02T15:35:32.930 回答