I have been trying to get an incredibly simple controller/view set up, and just can't make it work. In my web.xml
, I've defined a <servlet>
called servlet-context.xml
, which is running ok. In servlet-context.xml
, I've set:
<?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 />
among other things. My understanding is this is all that's needed to use @
annotations.
In my controller, I have:
@RequestMapping(value="/student/{username}/", method=RequestMethod.GET)
public String adminStudent(@PathVariable String username, @RequestParam String studentid) {
return "student";
}
And in my student.jsp
view, I have:
<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>
When I make a request to http://localhost:8080/application/student/xyz123/?studentid=456
, I get the view I expect, but all the variables are blank or 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>
I suspect it's a problem with the way my web.xml
or servlet-context.xml
are set up, but I can't find the culprit anywhere. There's nothing showing up in any logs as far as I can see.
Update: I was basing my code off this part of the 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";
}
...which works fine for me. I can't understand why this example works but mine doesn't. Is it because they're doing something different with servlet-context.xml
?
<annotation-driven conversion-service="conversionService">
<argument-resolvers>
<beans:bean class="org.springframework.samples.mvc.data.custom.CustomArgumentResolver"/>
</argument-resolvers>
</annotation-driven>
Create a Model map and add those parameter name/value pairs to it:
@RequestMapping(value="/student/{username}/", method=RequestMethod.GET)
public String adminStudent(@PathVariable String username, @RequestParam String studentid, Model model) {
model.put("username", username);
model.put("studentid", studentid);
return "student";
}