2017-05-23 4 views
0

Je l'ai utilisé quelque chose comme ça dans struts.xml:Pourquoi struts 2 appelle-t-on deux fois la méthode set() dans la classe d'action?

action name="{product}/{product-name}/info" 
class="myclass" 
.. and so on... 

J'ai ajouté les méthodes getter et setter pour les paramètres product et product-name. Lors de la journalisation, j'ai découvert que la méthode set pour les deux paramètres est appelée deux fois (pour chaque paramètre). Pourquoi est-ce si?

+0

Affichez la pile à chaque fois que vous définissez les paramètres. –

Répondre

0

Probablement dans votre pile d'intercepteurs, vous avez déclaré deux fois l'intercepteur params.

Et cela pourrait parfaitement convenir.

Le paramsPrepareParamsStack est l'une des piles disponibles dans le struts-default.xml et il est très utile lorsque vous implémentez Model-Driven-CRUD: Le premier params intercepteur définit l'ID de votre modèle, le prepare récupère le modèle de la base de données (ou autre) , le secondesparams intercepteur définit tous les attributs entrants du modèle (imaginez que vous lisez un POST)

de la documentation:

Ceci est utile lorsque vous souhaitez appliquer des paramètres directement à un objet que vous souhaitez charger externe (comme un DAO ou base de données ou d'une couche de service), mais ne peut pas charger cet objet jusqu'à au moins le paramètre ID a été chargé . En chargeant les paramètres deux fois, vous pouvez récupérer l'objet dans la méthode prepare(), permettant au second intercepteur de paramètres d'appliquer les valeurs sur l'objet.