Question

Je peux définir une propriété sur ValueStack de plusieurs manières.

 ValueStack stack = ActionContext.getContext().getValueStack();
 stack.getContext().put("resultDTO",resultDTO);  //1. creates a different branch 
 //parallel to root

 stack.set("resultDTO", resultDTO); //2. pushes on root as a Map?
 stack.push(resultDTO); //3. pushes on root
 myActionClass.setProperty(); //4. normal action accessor

Je dois pouvoir récupérer toutes ces valeurs dans JSP, freemarker et java comme

 stack.findValue() or stack.findString().    

Je veux connaître le cycle de vie de chacune de ces 4 méthodes de réglage.Est-ce à travers l'application.Est le ValeurStack créé chaque demande et les valeurs d'application et de session y sont définies pour chaque demande ?

Je sais que la 4ème méthode est l'approche la plus courante, mais je ne l'utilise peut-être pas dans tous les endroits où la classe d'action n'est pas facilement accessible.

J'ai un autre doute sur l'accès en JSP

 <s:push value="resultDTO" ><s:property value="data.form1[0]" /></s:push>
 <!--5.works for context.put() & stack.set() both-->

 <s:property value="#resultDTO.data.form1[0].countryofissue" /> <!--6.context.put()-->
 <s:property value="resultDTO.data.form1[0].countryofissue" />  <!--7.stack.set()-->
 <s:property value="data.form1[0].countryofissue" />            <!--8.stack.push()-->

Je veux aussi savoir comment fonctionne le 5ème point dans les deux cas stack.getContex().put() et stack.set()?Je comprends qu'en 6ème le résultatDTO J'accède, c'est une racine différente et en 7ème, c'est l'enfant de la racine par défaut, qui est ValueStack.En 8ème, il commence la recherche à partir de la racine par défaut.

Je suis passé par http://struts.apache.org/2.0.11.1/docs/ognl.html, http://struts.apache.org/2.1.2/struts2-core/apidocs/com/opensymphony/xwork2/util/ValueStack.html et plutôt confus ce lien http://www.opensymphony.com/ognl/html/DeveloperGuide/introduction.html#embeddingOGNL

Cela dit, je suis peu enclin à utiliser stack.getContext().put() méthode car je peux voir clairement les valeurs en définissant l'URL comme ?debug=navigateur.Prévenez-moi si je me trompe.

Était-ce utile?

La solution

Le ValueStack est par demande.Si vous placez des valeurs sur la pile, elles sont accessibles plus tard dans la requête (c'est-à-dire dans la couche de vue), mais ne survivraient pas à une redirection, qui serait une nouvelle requête HTTP et aurait sa propre requête HTTP. ValueStack.

Dans des conditions normales, les paramètres de l'URL ou d'une publication de formulaire seraient définis sur l'action à l'aide des méthodes de définition de l'action.Dans un intercepteur, vous pouvez ajouter des valeurs directement à la pile.Par exemple, le ExceptionMappingInterceptor utilise le stack.push(Object) méthode pour publier des exceptions à utiliser sur les pages d’erreur.

  • stack.getContext().put(String, Object) -- Place la clé/valeur dans une carte qui se trouve sur la pile.La carte représente le contexte de la pile.
  • stack.set(String, Object) -- Place la clé/valeur dans une carte qui se trouve sur la pile.Je ne sais pas comment cela se rapporte à la méthode précédente, à part qu'il s'agit d'une carte différente.
  • stack.push(Object) -- Ceci place l'objet à la racine de la pile.

Vous ne devriez pas avoir besoin de placer quoi que ce soit sur la pile à partir de la couche de vue, je suis donc curieux de savoir ce que vous essayez de faire qui nécessite cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top