使用formatDate时ClassCastException

时间:2012-01-10 23:19:36

标签: java spring classcastexception

我无法弄清楚为什么我的formatDate无法正常工作。这是我的代码:

爪哇

@DateTimeFormat(style = "SS")
@Column(name="my_date")
private Date myDate;

public Date getMyDate() {
    return this.myDate;
}
public void setMyDate(Date myDate) {
    this.myDate = myDate;
}

JSP - 使用fmt:formatDate代码的代码的一部分:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<c:forEach var="foo" items="${fooList}" varStatus="i">
                        <tr>
                            <td>${i.index+1}</td>                           
                            <td>${foo.id}</td>
                            <td>${foo.name}</td>
                            <td><fmt:formatDate value="${foo.myDate}" pattern="MM/dd/yyyy"/></td>
                        </tr>

Web.xml中

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

以下是控制器的修改版本,此处显示了处理日期的所有部分。

@RequestMapping(value = "/{id}", method = RequestMethod.GET)    
public String list(@PathVariable("id") String id, Model uiModel) {      
    List<foo> fooList = createList(fooList);

    uiModel.addAttribute("fooList", fooList);   

    return VIEW_OBJECT;
}

运行我的应用程序时出现此错误:

java.lang.ClassCastException: org.springframework.web.servlet.support.JstlUtils$SpringLocalizationContext incompatible with java.lang.String

***只有当formateDate代码在那里时才显示错误,否则所有EL评估都很好。

有人知道为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

找到了解决我的fmt标签无效的原因。我需要改变我的依赖性:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.1.2</version>
</dependency> 

要:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.1.2</version>
    <scope>provided</scope>
</dependency>

感谢您的建议!

答案 1 :(得分:0)

我无法更改依赖项,因此我的解决方案是使用scriptlet。我没有解决fmt:formatDate,但它可以用作workarround:

<c:forEach var="foo" items="${fooList}" varStatus="i">
<tr>
<td>${i.index+1}</td>
<td>${foo.id}</td>
<td>${foo.name}</td>

<%--Scriptlet alternative: %>
<c:set var="fooMyDate" value="${foo.myDate}" scope="request"/>
<%
    Object myDate = request.getAttribute("fooMyDate");
    java.text.DateFormat df = new java.text.SimpleDateFormat("MM/dd/yyyy");
%>
<td><%= df.format(myDate)%></td>

</tr>