Comme nous le savons tous, la classe d'action de Strut2 peut obtenir toutes les valeurs pertinentes via des attributs, tels que les paramètres de demande, les paramètres de configuration d'action, le passage des valeurs d'attribut à d'autres actions (via les résultats de la chaîne), etc. Pour obtenir ces valeurs de paramètres, la seule chose que nous devons faire est de déclarer la propriété avec le même nom que le paramètre dans la classe d'action. Avant que Struts2 appelle la méthode d'action de la classe d'action (la valeur par défaut est la méthode d'exécution), la propriété d'action correspondante sera attribuée.
Pour remplir cette fonction, Struts2 dépend de l'objet ValueStack dans une large mesure. Cet objet traverse tout le cycle de vie de l'action (chaque instance d'objet de la classe d'action aura un objet ValueStack). Lorsque Struts2 reçoit une demande .Action, il créera d'abord une instance de l'objet de classe d'action, mais n'appellera pas la méthode d'action, mais placera d'abord les propriétés correspondantes de la classe d'action sur le nœud de niveau supérieur de l'objet ValueStack (l'objet ValueStack est équivalent à une pile). C'est juste que toutes les valeurs d'attribut sont des valeurs par défaut, telles que la valeur d'attribut du type de chaîne est nul, la valeur d'attribut du type int est 0, etc.
Après avoir traité les travaux ci-dessus, Struts2 appellera l'intercepteur dans la chaîne d'intercepteur. Après avoir appelé tous les intercepteurs, la méthode d'action de la classe d'action sera appelée. Avant d'appeler la méthode d'action, la valeur d'attribut dans le nœud de niveau supérieur de l'objet ValueStack sera attribuée à l'attribut correspondant dans la classe d'action. Tout le monde devrait faire attention, cela nous apporte beaucoup de flexibilité. C'est-à-dire que pendant le processus de Struts2 appelant l'intercepteur, la valeur de l'attribut dans l'objet ValueStack peut être modifiée. Lorsqu'une certaine valeur d'attribut est modifiée, la valeur d'attribut correspondante de la classe d'action deviendra la valeur du dernier changement de l'attribut dans l'intercepteur.
D'après la description ci-dessus, il est facile de savoir que dans la classe d'action de Struts2, vous pouvez obtenir des valeurs de paramètres avec le même nom que l'attribut, qui sont gérés par différents intercepteurs. Par exemple, l'intercepteur qui obtient les paramètres de demande est des paramètres, et l'intercepteur qui obtient les paramètres de configuration de l'action est Staticparams, etc. Lisez les valeurs correspondantes à l'intérieur de ces intercepteurs et mettez à jour les valeurs des propriétés correspondantes du nœud de niveau supérieur de l'objet ValueStack. L'objet ValueStack est comme une courroie de convoyeur, passant la valeur d'attribut d'un intercepteur à un autre intercepteur (bien sûr, pendant ce temps, la valeur d'attribut peut changer), et enfin le passer à l'objet Action, et la valeur finale de l'attribut dans l'objet ValueStack est attribuée à l'attribut correspondant de la classe d'action.
Lorsque nous utilisons les expressions EL dans la couche d'affichage, nous pouvons non seulement accéder aux propriétés dans les 11 objets cachés dans l'expression EL, mais également accéder aux valeurs de propriété de l'objet dans ValueStack, car Struts2 encapsule davantage HttpServLetRequest.
classe publique StrutsRequestWrapper étend httpservletRequestwrapper {public strutsrequestwrapper (httpservletRequest req) {super (req);} objet public objet getAttribute (String S) {...... ActionContext ctx = actionContext.getContext (); Attribut d'objet = super.getAtTrus (ctx != null) {if (attribute == null) {//If the attribute value is not found from the request range, that is, the attribute value of the object is found from ValueStack... ValueStack stack = ctx.getValueStack();//Get the valueStack object attribute = stack.findValue(s);//Follow the specified attribute value from the object in ValueStack ...}} Retour attribut;}}Résumer
Ce qui précède concerne cet article sur la façon dont Strut2 encapsule les paramètres de demande, et j'espère qu'il sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!