ClassCastException при использовании formatDate - PullRequest
1 голос
/ 11 января 2012

У меня проблемы с попыткой выяснить, почему мой formatDate работает неправильно.Вот мой код:

Java

@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 голосов
/ 29 ноября 2016

Я не мог изменить зависимости, поэтому я решил использовать скриптлет. Я не решаю fmt: formatDate, но его можно использовать как обходной путь:

<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>
0 голосов
/ 12 января 2012

Нашел решение, почему мой тэг 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>

Спасибо за предложения!

...