Spring MVC einfaches Beispiel mit JSP und JSTL als Ansicht funktioniert nicht
Als mit vielen neuen Menschen zu Spring MVC bin ich Schwierigkeiten haben, über die erste Hürde. In meinem Fall, dass die aktuelle Hürde scheint mit JSTL fmt taglib nicht formatieren meine Daten richtig oder es übergeben wird ein string-literal durch das value-Attribut der fmt-tag . Ich habe ein einfaches Maven-Projekt, das ich benutze, um zu arbeiten, die Knicke in meinem wissen. Die folgenden Codeausschnitte sind aus meiner WelcomeController, web-servlet.xml, web.xml und herzlich willkommen.jsp.
WelcomeController.java
@Controller
@RequestMapping(value="/")
class WelcomeController {
@RequestMapping(method=RequestMethod.GET)
public String welcome(Model model) {
Date today = new Date();
System.out.println("Controller being called");
model.addAttribute("today", today);
System.out.println(model.containsAttribute("today"));
return "welcome";
}
}
web-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans> <!-- bean namespaces ommitted for space sake -->
<context:component-scan base-package="org.opel.eros.web"/>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<context:property-placeholder location="classpath:META-INF/properties/web-config.properties"/>
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="${config.prefix}"/>
<property name="suffix" value="${config.suffix}"></property>
</bean>
web.xml
<web-app>
<servlet>
<servlet-name>eros</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>eros</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Und schließlich willkommen.jsp
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head></head>
<body>
<fmt:formatDate value="${today}" pattern="yyyy-MM-dd"/>
</body>
</html>
Wird nicht viel einfacher, ich weiß, aber eine Ausnahme wird ausgelöst, wenn ich geben Sie die url http://localhost:9990/XYZ/
ist dies die Ausnahme: PWC6338: Cannot convert "${heute}" für das Attribut Wert des java-bean.util.Datum
Das scheint mir ein Fehler, wo die formateDate übergeben wird das String-literal "${heute}", die offensichtlich eine Ausnahme. Das Beispiel, das ich verwende, um zu helfen (ab Frühjahr reciepes verwendet: Eine problem-Lösung-Ansatz) besagt, dass Zugriff auf Modell-Attribute verwenden Sie die syntax angegeben, in der fmt tag über.
Grundsätzlich bin ich auf der Suche nach einer Lösung und ein Grund, warum dies passiert ist ( ich weiß es ist wahrscheinlich etwas sehr einfaches und dumm auf meinem Teil =]). Vielen Dank für jede Hilfe im Voraus, sehr geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Vermutung ist, Sie haben eine Diskrepanz zwischen der JSP-version und JSTL-version Sie verwenden. Hier ist ein Artikel, der beschreibt, wie die Verwendung von JSTL je nach setup müssen Sie: Wie zu Bezug und Verwendung von JSTL in Ihrer Web-Anwendung.
Ihre
<web-app>
tag in web.xml sagt nichts über die version der Anwendung, so ist dies das erste, was ich überprüfen würde. Sie können code schreiben, um herauszufinden, Ihre version der Anwendung (jedes servlet-version sollte seine Verzug, wenn Sie nicht angeben, es ausdrücklich in web.xml), oder eine quick-and-dirty-test, um zu sehen, wenn Sie mit JSP 2, indem Sie Ihre JSP auf diesem:Wenn Sie sehen, das Datum, Wert, Sie sind auf JSP 2; wenn Sie sehen, dass der string ${heute}, sind Sie auf der JSP-1 (mit der falschen JSTL-version).
Das problem scheint innen zu sein, die web.xml. Die web.xml und entsprechenden Projekt-Struktur automatisch erzeugt durch Feder-Source-Werkzeugen mit Hilfe der maven-archtype-webapp. Das auto erzeugt web.xml nicht geben Sie einen beliebigen namespace defenitions; Statt der Angabe eines DOCTYPE ähnlich wie diese:
Ich machte den Fehler, vorausgesetzt, dass der automatisch generierte code würde die version 3.0-Definitionen. Ein Wechsel auf die version 3 behoben die Probleme. Eine Sache zu beachten ist, dass, während das system war offensichtlich mit der version 2.3 der Ausgabe Aufrufe:
Erzeugt ein Servlet-version 3.0, die dazu führen, dass einige Verwirrung auf meinem Teil und fangen können andere Menschen aus. Großen Dank an Bogdan für seine Hilfe.