我有以下标签:
<%@ 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
可以使用它?
答案 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.Date
到import java.util.Date;
public class SomeModel {
private Date somefield;
// ...
}
。只是向上转换就足够了。
E.g。
someModel.setSomefield(resultSet.getTimestamp("somefield"));
与
{{1}}