Web Spring MVC, @ModelAttribute et @RequestParam ensemble

J'ai un contrôleur avec une méthode GET écrit comme suit:

@Controller
public class ThingController {

     @RequestMapping( value = "/Thing.html", method = RequestMethod.GET )
    public String editThing(@RequestParam( "thingId" ) String thingId, @ModelAttribute ThingBean thing, BindingResult result) {
        thing = <some service call using thingId>
        logger.debug("The thing to edit is {}", thingBean);
        return "thing/edit";
    }
}

Le haricot est correct (getters et setters), le service d'appel renvoie le bon ThingBean avec le thingId, et ma page JSP à la chose/modifier.jsp affiche.

La JSP est:

<html>
<body>
    <h1 id="title" class="title">Edit Thing</h1>

<form:form id="thing" modelAttribute="thing">
    <form:input path="subject" id="subject" tabindex="1" />
    <form:textarea path="message" />

</form:form>

</body>
</html>

Encore, les JSP affiche les valeurs vides pour l'objet et le message. Oui, il y a des getters/setters sur ces propriétés.

J'ai une très similaires Contrôleur qui fonctionne très bien, sauf qu'il n'y est pas de @RequestParam dans la signature de la méthode mappée.

Je n'ai pas vu de n'importe où dans le Printemps WebMVC docs qui dit que je ne peut pas le faire - pourquoi n'est-il pas de travail? Pourquoi n'est-elle pas la mise à jour ModelAttribute objet lié dans la JSP forme?

EDIT:

Ce contrôleur, et il en est de même pour les REÇOIS des appels a travaillé de nombreux de nombreux endroits différents, -- la variable annotée avec @ModelAttribute est rempli par la méthode alors disponible pour la page JSP d'affichage. Pourquoi, en ajoutant un @RequestParam annotation, faut-il s'arrêter?

@RequestMapping( value = "/Things.html", method = RequestMethod.GET )
public String getThings(@ModelAttribute ThingForm thingForm, BindingResult result) {

    try {
        //need to get list of Things
        List<Thing> Things = <service call that gets list of Things>;
        thingForm.setThings(Things);
        logger.debug("Things are {}", Things);

    }
    catch (ResourceNotFoundException e) {
        return "error";
    }

    logger.debug("Thing list loading - end");

    //Go to jsp
    return "thing/list";
}
Pouvez-vous nous montrer votre autre contrôleur.et Ce que M. Deinum a dit est correct.
Édité question d'ajouter de contre-exemple.
Comme je l'ai mentionné dans ma réponse dans le contrôleur que vous avez posté, vous êtes affectation une variable (l'argument de méthode) vous n'êtes PAS devoir changer l'objet que vous passer dans la méthode. Dans le contrôleur de vous dire que c'est fonctionne vous ajouter quelque chose à un objet qui fonctionne comme un objet de modèle. Fondamentalement, c'est tout à fait différent.

OriginalL'auteur Jim Jarrett | 2013-09-05