435 votes

Ce qui est @ModelAttribute dans Spring MVC ?

Quel est le but et l’utilisation de `` dans Spring MVC ?

439voto

fasseg Points 7654

@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é.

153voto

Christopher Yang Points 785

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X