Quel est le but et l’utilisation de `` dans Spring MVC ?
Réponses
Trop de publicités?@ModelAttribute
se réfère à une propriété de l'objet Modèle (le M de MVC ;)
donc, disons que nous avons une forme avec une forme de sauvegarde de l'objet qui est appelé la "Personne"
Ensuite, vous pouvez avoir Spring MVC offre cet objet à un Contrôleur, en utilisant la méthode de l' @ModelAttribute
d'annotation:
public String processForm(@ModelAttribute("person") Person person){
person.getStuff();
}
Vérifiez ici pour un exemple de Printemps (2.5), voir aussi "Utilisation de @ModelAttribute sur l'argument d'une méthode" (Printemps 3.1).
D'autre part, l'annotation est utilisée pour définir des objets qui devraient faire partie d'un Modèle. Donc, si vous voulez avoir une Personne de l'objet référencé dans le Modèle, vous pouvez utiliser la méthode suivante:
@ModelAttribute("person")
public Person getPerson(){
return new Person();
}
Cette méthode annotée permettra l'accès à la Personne objet de votre point de Vue, car il est automatiquement ajouté à la Modèles de Printemps. Voir "Utilisation de @ModelAttribute sur une méthode" (Printemps 3.1).
Espérons que cela a aidé.
Je sais que c'est un vieux thread, mais je pensais que je jette mon chapeau dans l'anneau et voir si je peux brouiller l'eau un peu plus :)
J'ai trouvé ma première difficulté à comprendre @ModelAttribute
était un résultat de Printemps de la décision de combiner plusieurs annotations dans un. Il est devenu plus clair une fois que j'ai de le diviser en plusieurs petites annotations:
Pour le paramètre d'annotations, pensez @ModelAttribute
comme l'équivalent de l' @Autowired + @Qualifier
- dire qu'il essaie de récupérer un haricot avec le nom donné à partir du Printemps modèle de gestion. Si le nommé haricot n'est pas trouvé, au lieu de jeter une erreur ou le retour d' null
, il se fait implicitement sur le rôle de l' @Bean
c'est à dire Créer une nouvelle instance en utilisant le constructeur par défaut et ajouter la fève à la modèle.
Pour la méthode des annotations, pensez @ModelAttribute
comme l'équivalent de l' @Bean + @Before
, c'est à dire qu'il met le haricot construit par l'utilisateur du code dans le modèle et il est toujours appelé avant qu'une demande de la méthode de gestion.
Au sens figuré, je vois @ModelAttribute
suivants (merci de ne pas prendre littéralement!!):
@Bean("person")
@Before
public Person createPerson(){
return new Person();
}
@RequestMapping(...)
public xxx handlePersonRequest( (@Autowired @Qualifier("person") | @Bean("person")) Person person, xxx){
...
}
Comme vous pouvez le voir, le Printemps a pris la bonne décision de faire @ModelAttribute
un tout-englobant l'annotation; personne ne veut voir une annotation assortiment.