2012-01-29 6 views
3

J'ai un contrôleur de 1600 lignes. Ceci est principalement rempli avec un tas de méthodes publiques avec l'annotation @ModelAttribute. Il a également quelques méthodes @RequestMapping.trop de méthodes publiques avec @ModelAttribute

Je voudrais réduire le nombre de lignes et diviser cette classe. Comment gérez-vous plusieurs méthodes publiques avec l'annotation @ModelAttribute? Ne sont-ils pas tous invoqués à chaque fois qu'une demande est traitée?

Répondre

2

J'ai un contrôleur qui est de 1600 lignes à long

Gulp.

Comment gérez-vous plusieurs méthodes publiques avec l'annotation @ModelAttribute? Ne sont-ils pas tous invoqués à chaque fois qu'une demande est traitée?

Lorsqu'il est utilisé pour annoter une méthode, cette annotation indique que doit être utilisé pour alimenter le modèle pour chaque requête exécutée par cette classe de contrôleur, quelle que soit la méthode @RequestMapping est exécutée la valeur de retour de la méthode.

Ma suggestion est que vous effectuez un audit pour voir quelles vues (par exemple JSP) utilisent quelles données de modèle fournies par les diverses méthodes @ModelAttribute. Il est probable que chaque vue utilise uniquement un sous-ensemble de ces données.

Une fois que vous avez déterminé quelles combinaisons de méthodes @ModelAttribute et @RequestMapping vont de pair, puis les décomposer en classes individuelles.

Si cela ne fonctionne pas (peut-être que toutes les vues utilisent réellement toutes les données), pensez à extraire complètement les méthodes @ModelAttribute et assemblez-les en utilisant une méthode unique qui fusionne leurs sorties manuellement (par exemple, passer l'objet Model ou ModelMap de la méthode @RequestMapping à cette nouvelle méthode, qui ajoute les bits de modèle à cet objet.

Rappelez-vous, @ModelAttribute méthodes -annotated sont juste un moyen pratique d'ajouter des données modèles supplémentaires. Ils ne sont pas le seul moyen:

+0

Merci. Je vais essayer cela dans notre code et afficher les résultats. J'avais besoin d'un endroit pour commencer. – pslk

0

Vous ne pouvez pas grouper plusieurs @ModelAttribute s ensemble? Par exemple, si vous avez trois méthodes chacune pour récupérer les valeurs de trois boîtes de sélection différentes, vous pourriez peut-être les mettre toutes dans une seule méthode.

1

méthodes de @ModelAttribute peuvent également retourner vide:

@ModelAttribute 
public void populateModel(Model model) { 
    model.addAttribute("key", "value"); 
    // keep adding any number of attributes... 
} 
Questions connexes