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可以使用它?
你需要传递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)