在学习SpringMVC中的使用Controller接受表单的值,
按照《Spring实战》中的代码,Controller如下:
@RequestMapping(value = "/register", method = POST)
public String processRegistration(Spitter spitter) {
System.out.println(spitter.getUsername());
spitterRepository.save(spitter);
return "redirect:/spitter/" + spitter.getUsername();
}
打印那行是我自己加的,用来验证表单的值是否绑定到了Spitter对象
而Spring官方的教程中在Spitter前面多了一个@ModelAttribute注解,
但是在这个例子里面产生的效果和不加似乎是一样的,都能够绑定表单信息到对象中,
所以想问下这个注解的功能?在这个例子中是不是即使不显示写也能有一样的功能?
Non, @ModelAttribute a deux fonctions
L'une consiste à extraire les données, c'est-à-dire à retirer les données de la requête et à les encapsuler dans les paramètres de la méthode du contrôleur. placez ces données dans le modèle de cette façon, vous pouvez utiliser des expressions EL dans les pages jsp pour récupérer les données et les afficher
.
Si l'annotation @ModelAttribute est ajoutée au paramètre, la clé dans @ModelAttribute sera trouvée en premier avant d'exécuter @RequestMapping. S'il n'y a pas de @ModelAttribute et qu'elle n'est pas disponible ou n'est pas obtenue, un objet spitter sera instancié via. réflexion, puis la demande transmise obtient la valeur que vous avez définie dans l'objet. Même si le résultat est le même, le processus est différent.
Bien qu'il ait ses propres caractéristiques, je ne l'ai jamais utilisé après l'avoir utilisé pendant si longtemps, je pense qu'il peut être ignoré @ModelAttribute
.