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

Sar*_*els 7 java timestamp servlets 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>
Run Code Online (Sandbox Code Playgroud)

但是我得到以下错误:

错误500:com.ibm.ws.jsp.JspCoreException:java.lang.IllegalArgumentException:无法将类型为java.sql.Timestamp的5/1/12 10:36 AM转换为long

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

Bal*_*usC 9

你需要传递Timestamp#getTime().

<jsp:setProperty name="dateValue" property="time" value="${timestamp.time}" />
Run Code Online (Sandbox Code Playgroud)

但这一切都没有意义.在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>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我也会改变你的模型来java.util.Date代替声明属性.您不应该java.sql.Timestamp在模型和视图中使用,而只能在数据层中使用.您无需通过解析/格式转换ResultSet#getTimestamp()java.util.Date.只是向上转换就足够了.

例如

import java.util.Date;

public class SomeModel {

    private Date somefield;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

someModel.setSomefield(resultSet.getTimestamp("somefield"));
Run Code Online (Sandbox Code Playgroud)