ClassCastException quando si utilizza FormatoData
-
26-10-2019 - |
Domanda
Ho problemi cercando di capire il motivo per cui il mio FormatoData non funziona correttamente. Ecco il mio codice:
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 - porzione di codice che utilizza il fmt: Codice FormatoData:
<%@ 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>
Ecco una versione modificata del controller, tutte le parti che si occupano con la data sono mostrati qui.
@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;
}
Quando si esegue la mia applicazione ottengo questo errore:
java.lang.ClassCastException: org.springframework.web.servlet.support.JstlUtils$SpringLocalizationContext incompatible with java.lang.String
*** errore mostra solo quando il codice formateDate è in là, altrimenti tutto EL valutare bene.
Chiunque sa perché questo può accadere?
Soluzione
Trovato la soluzione sul motivo per cui il mio tag fmt non funzionava. Avevo bisogno di cambiare la mia dipendenza da:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
A:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
<scope>provided</scope>
</dependency>
Grazie per i suggerimenti!
Altri suggerimenti
Non ho potuto cambiare le dipendenze, quindi la mia soluzione era quella di usare uno scriptlet. Io non risolve il fmt: FormatoData, ma può essere utilizzato come 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>