JSTL - 使用带有 java.sql.Timestamp 的 formatDate
Posted
技术标签:
【中文标题】JSTL - 使用带有 java.sql.Timestamp 的 formatDate【英文标题】:JSTL - use formatDate with a java.sql.Timestamp 【发布时间】:2012-05-12 02:45:30 【问题描述】:我有一个标签如下:
<%@ 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】:你需要传入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"));
【讨论】:
哦,笨蛋。我从未尝试直接在时间戳上使用formatDate
,因为我在网上看到有关必须将时间戳转换为日期才能与formatDate
一起使用的问题。谢谢!
其他问题是关于时间戳,如 long
值,表示纪元时间。但实际上你已经有一个 java.sql.Timestamp
,因此它已经是 java.util.Date
的子类。以上是关于JSTL - 使用带有 java.sql.Timestamp 的 formatDate的主要内容,如果未能解决你的问题,请参考以下文章
为啥要使用 JSTL?当我们在 JSP 文件中使用带有连接字符串的数据库连接来获取从 servlet 发送的数据时会有啥危害[重复]
JSTL基础 SimpleTagSupport 自定义标签 带有属性