Frühjahr 3.0.6 MVC @PathVariable und @RequestParam blank/leer in JSP anzeigen
Habe ich versucht zu bekommen, eine unglaublich einfache controller/view-set-up, und kann einfach nicht damit es funktioniert. In meinem web.xml
habe ich definiert <servlet>
genannt servlet-context.xml
, der läuft ok. In servlet-context.xml
habe ich eingestellt:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
<...other stuff in here... />
<mvc:annotation-driven />
unter anderem. Mein Verständnis ist, das ist alles, was notwendig zu verwenden @
Anmerkungen.
In meinem controller habe ich:
@RequestMapping(value="/student/{username}/", method=RequestMethod.GET)
public String adminStudent(@PathVariable String username, @RequestParam String studentid) {
return "student";
}
Und in meinem student.jsp
Ansicht, die ich habe:
<p>This is the page where you would edit the stuff for ${username}.</p>
<p>The URL parameter <code>studentid</code> is set to ${studentid}.</p>
Wenn ich eine Anfrage http://localhost:8080/application/student/xyz123/?studentid=456
bekomme ich die Ansicht habe ich erwartet, aber alle Variablen sind leer oder null:
<p>This is the page where you would edit the stuff for .</p>
<p>The URL parameter <code>studentid</code> is set to .</p>
Ich vermute, es ist ein problem mit der Art, wie meine web.xml
oder servlet-context.xml
eingerichtet sind, aber ich kann nicht den Schuldigen finden überall. Es gibt nichts, zeigt sich in jegliche Protokolle, soweit ich das sehen kann.
Update: ich war stützend meinen code aus diesem Teil der spring-mvc-showcase:
@RequestMapping(value="pathVariables/{foo}/{fruit}", method=RequestMethod.GET)
public String pathVars(@PathVariable String foo, @PathVariable String fruit) {
//No need to add @PathVariables "foo" and "fruit" to the model
//They will be merged in the model before rendering
return "views/html";
}
...die funktioniert gut für mich. Ich kann nicht verstehen, warum dieses Beispiel funktioniert, aber mir nicht. Ist es, weil Sie etwas anderes zu tun mit servlet-context.xml
?
<annotation-driven conversion-service="conversionService">
<argument-resolvers>
<beans:bean class="org.springframework.samples.mvc.data.custom.CustomArgumentResolver"/>
</argument-resolvers>
</annotation-driven>
InformationsquelleAutor alexmuller | 2011-11-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie ein Modell der Karte und fügen diese parameter name/Wert-Paare:
InformationsquelleAutor duffymo
Aha! Kapiert, endlich.
Den
spring-mvc-showcase
ist mit Spring 3.1, die automatisch aussetzen@PathVariable
s zu dem Modell, nach SPR-7543.Wie bereits von @duffymo und @JB Nizet, indem das Modell mit
model.put()
ist das, was zu tun für die Versionen der Frühling früher als 3.1.Ted Jungen wies mich in die richtige Richtung mit Frühjahr: Setzen @PathVariables Dem Modell.
InformationsquelleAutor alexmuller
@PathVariable
bedeutet, dass die annotierte Methode argument extrahiert werden sollen aus dem Pfad der URL aufgerufen.@RequestParam
bedeutet, dass die annotierte Methode argument muss extrahiert aus dem request-Parameter. Keine dieser Anmerkungen verursachen, die kommentierten Argumente gebracht werden, die in der request -, session-oder application-scope.${username}
bedeutet "schreiben Sie den Wert des Attributs "username" (zu finden in der Seite, oder request oder session-oder application-scope) in der Antwort". Da Sie nicht enthalten keine Nutzernamen-Attribut in jedem der genannten Bereiche, es muss nicht alles schreiben.Den code würde funktionieren, wenn die Methode zurückgegeben wird ein ModelAndView-Objekt, und das Modell enthielt eine
username
Attribut und einstudentid
Attribut.Vielleicht bin ich falsch, dann, und Feder fügt automatisch die path-Variablen für das Modell. Die Referenz doc sagt, diese Art von Pfad-Variablen funktioniert nur, wenn cebugging aktiviert ist, während der Kompilierung. Siehe static.springsource.org/spring/docs/3.0.x/.... Versuchen Sie es mit @PathVariable("username") und @PathVariable("studentid")
InformationsquelleAutor JB Nizet
@PathVariable
ist, um einige Platzhalter, die aus der uri (Frühling nennen es eine URI-Vorlage)— siehe Frühling-Referenz Kapitel 16.3.2.2 URI-Vorlage Muster
@RequestParam
ist die Erlangung einer parameter — siehe Frühling-Referenz Kapitel 16.3.3.3 Verbindliche Anfrage-Parameter, um die Parameter der Methode, die mit @RequestParamÜbernehmen diese Url
http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
(um die Rechnungen für den Benutzer 1234 für heute)InformationsquelleAutor Sudhakar