112 votes

Qu'est-ce qui est le mieux, retourner "ModelAndView" ou "String" sur le contrôleur Spring3 ?

La façon de retourner ModelAndView

@RequestMapping(value = "/list", method = RequestMethod.GET)
public ModelAndView list(
    @UserAuth UserAuth user, 
    ModelAndView mav) {

    if (!user.isAuthenticated()) {
        mav.setViewName("redirect:http://www.test.com/login.jsp");
        return mav;
    }

    mav.setViewName("list");
    mav.addObject("articles", listService.getLists());

    return mav;
}

Le chemin de retour String

@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(
    @UserAuth UserAuth user, 
    Model model) {

    if (!user.isAuthenticated()) {
        return "redirect:http://www.test.com/login.jsp";
    }

    model.addAttribute("articles", listService.getLists());

    return "list";
}

Ils fonctionnent de la même manière. Quelle est la meilleure méthode ? et quelle est la différence ?

128voto

skaffman Points 197885

Il n'y a pas de meilleur moyen. Les deux sont parfaitement valables. Celle que vous choisissez d'utiliser dépend de celle qui convient le mieux à votre application - Spring vous permet de faire les deux.

Historiquement, les deux approches proviennent de versions différentes de Spring. La version ModelAndView était le principal moyen de renvoyer des informations sur le modèle et la vue à partir d'un contrôleur avant Spring 2.0. Désormais, vous pouvez combiner la Model et le paramètre String mais l'ancienne approche est toujours valable.

15voto

M Sach Points 6078

Je voudrais également ajouter mes deux cents. La deuxième approche est plus orientée vers la convention, c'est-à-dire que le développeur ne mentionne pas explicitement quelle est sa vue, mais il est implicite que la chaîne de retour est le nom de la vue. Donc moins de codage, lisible et standard. Bien mieux que l'ancienne méthode avec ModelAndView.

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