Comment est utilisé @RequestAttribute et @ModelAttribute annotation dans ce Spring MVC vitrine exemple?
Je suis assez nouveau dans Spring MVC.
Dans cette période, j'étudie la Spring MVC vitrine exemple downlodable de STS tableau de bord.
Je vais avoir quelques problèmes de compréhension de la façon Personnalisée, qui peut être Résolu Web Arguments sont traités dans cet exemple.
Dans la pratique, j'ai la situation suivante:
Dans ma maison.jsp vue j'ai le lien suivant:
<a id="customArg" class="textLink" href="<c:url value="/data/custom" />">Custom</a>
Ce lien générer une Requête HTTP vers l'URL: "/data/custom"
Le contrôleur de la classe qui contient la méthode qui gère cette demande a le code suivant:
@Controller
public class CustomArgumentController {
@ModelAttribute
void beforeInvokingHandlerMethod(HttpServletRequest request) {
request.setAttribute("foo", "bar");
}
@RequestMapping(value="/data/custom", method=RequestMethod.GET)
public @ResponseBody String custom(@RequestAttribute("foo") String foo) {
return "Got 'foo' request attribute value '" + foo + "'";
}
}
La méthode qui traite cette Requête HTTP est custom()
Donc, lorsque le lien est cliqué, la Requête HTTP est gérée par la méthode personnalisée...
J'ai du mal à comprendre ce que les @RequestAttribute
annotation.
Je pense que, dans ce cas, il se lie à la demande de l'attribut nommé foo pour une nouvelle String foo
variable.
Mais... où est cet attribut prises? Est-ce variable prise par le Printemps?
Ok...mon idée est que cet attribut de la requête est prise à partir d'un HttpServletRequest
objet...
Je pense cela parce que, dans cette classe, j'ai aussi ont le beforeInvokingHandlerMethod()
méthode qui ont un prononcent le nom...il semble donc que cette méthode seta un attribut, qui ont name=foo
et value=bar
, à l'intérieur d'un HttpServletRequest
objet...et puis si le custom()
méthode peut utiliser cette valeur...
En fait mon résultat est:
Got 'foo' request attribute value 'bar'
Pourquoi le beforeInvokingHandlerMethod()
appelée avant la custom()
méthode?
Et pourquoi le beforeInvokingHandlerMethod()
annotée par @ModelAttribute
annotation? Qu'est-ce cas signifie?
Vous devez vous connecter pour publier un commentaire.
Vous avez raison de l'hypothèse de
@RequestAttribute
, il n'a pas besoin d'être mis enbeforeInvokingHandlerMethod
. Supposons que vous disposez d'une méthode mappé à/data/init
qui transmet la requête à l'/data/custom
. Dans ce cas, la demande attribut peut être défini dans la méthode init aussi.vous obtiendrez la raison ici
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib-methods
String custom(@RequestAttribute("foo") foo
c'est une méthode pratique. D'autres sages, vous aurez à écrireString foo=(String) request.getAttribute("foo");
custom()
. depuis qu'elle est annotée avec @requestMapping printemps va vérifier ses paramètres, le type et les remplir , avant de l'appeler.