Question

Je suis à l'aide d' Struts 2.

J'aimerais revenir à partir d'une Action à la page qui l'invoque.

Dire que je suis dans la page x.jsp, J'invoque l'action Visuelle de changer de CSS préférences dans la session;Je veux retourner à l' x.jsp plutôt qu'à une page fixe (c'est à dire la maison.jsp)

Voici pertinentes struts.xml fragment:

<action
   name="Visual"
   class="it.___.web.actions.VisualizationAction">
   <result name="home">/pages/home.jsp</result>
</action>

Bien sûr, ma VisualizationAction.execute() retourne la maison.

Est-il de toute "magie" de la constante (comme, par exemple, INPUT_PAGE) que je retourne faire l'affaire?

Dois-je utiliser plus d'implication de la méthode (c'est à direl'extraction de la page de demande et d'expédition)?

T. I. A.

Était-ce utile?

La solution

Vous pouvez utiliser une dynamique de résultat struts.xml.Par exemple:

<action
   name="Visual"
   class="it.___.web.actions.VisualizationAction">
   <result name="next">${next}</result>
</action>

Ensuite, dans votre action, vous créez un champ appelé prochaine.Donc, pour appeler l'action vous permettra de passer le nom de la page que vous souhaitez transmettre à la prochaine.L'action revient ensuite "suivant" et jambes de suspension sera de savoir quelle page aller.

Il y a une belle explication sur ce post: Un Débordement De Pile

Autres conseils

return INPUT;

fera l'affaire.ENTRÉE constante est définie dans l'interface d'Action lui-même.Il indique que l'action a besoin de plus d'entrée.

En appelant la page si tu voulais parler de la page que vous avez pris pour l'action de saisie de la page, votre page d'entrée aura pour stocker HTTP en-tête "Referer" à la demande de la portée de l'Action.

Ma solution impliquerait une interface et un intercepteur.Vous implémentez l'interface suivante pour toutes les actions pour ce qui vous êtes susceptibles de vouloir rediriger:

public interface TargetAware {
  public String getTarget();
  public void setTarget(String target);
}

L'intercepteur garantit simplement que la cible est définie, si nécessaire:

public class SetTargetInterceptor extends MethodFilterInterceptor implements Interceptor {
   public String doIntercept(ActionInvocation invocation) {
      Object action = invocation.getAction();
      HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);
      if (action instanceof TargetAware) {
         TargetAware targetAwareAction = (TargetAware) action;
         if (targetAwareAction.getTarget() == null)
            targetAwareAction.setTarget(getCurrentUri(request));
      }     
      return invocation.invoke();
   }

   // I'm sure we can find a better implementation of this...
   private static String getCurrentUri(HttpServletRequest request) {
      String uri = request.getRequestURI();
      String queryString = request.getQueryString();
      if (queryString != null && !queryString.equals(""))
         uri += "?" + queryString;
      return uri;
   }

   public void init() { /* do nothing */ }
   public void destroy() { /* do nothing */ }
}

À partir de là, une fois que ces deux bits sont en place et vos actions à mettre en œuvre les TargetAware interface (si vous vous attendez à avoir pour rediriger vers eux), alors vous avez accès à un target paramètre dans votre Jsp chaque fois que vous en avez besoin.Passer ce paramètre à votre VisualizationAction (qui pourrait tout aussi bien mettre en œuvre également la TargetAware l'interface!), et sur SUCCESS, redirection comme expliqué par Vincent Ramdhanie:

<action name="Visual" class="it.___.web.actions.VisualizationAction">
   <result type="redirect">
      <param name="location">${target}</param>
      <param name="parse">true</param>
   </result>
</action>

Je n'ai pas essayé tous les détails de cette stratégie.En particulier, méfiez-vous de la notation qui entoure le redirect type de résultat (selon votre version de Struts2:2.0.x et 2.1.x peut différer sur ce...).

Je préfère la voie lorsque vous navigation des utilisateurs en particulier les actions.

http://domain.com/myAction.action

Vous pouvez utiliser un certain nombre de paramètres comme indicateur, que vous voulez changer de design actuel:c'est à dire

http://domain.com/myAction.action?changeDesign=silver_theme

Alors, vous écrivez struts 2 interceptor, dont la logique est de vérifier la présence d'un tel paramètre "changeDesign', et l'intercepteur fera nessesary travaux de modification de la conception et de contrôle de flux de travail.Avec l'intercepteur vous dissociez vos actions de façonnage de la logique.

ok, dans votre classe.___.web.actions.VisualizationAction, vous devez retourner une valeur de type string contenant de l'ENTRÉE, puis, sur struts.xml vous avez mis quelque chose comme ceci:

<action name="Visual" class="it.___.web.actions.VisualizationAction">
   <result name="input">yourJspPage.jsp</result>
</action>

cela vous mènera à la page que vous souhaitez.Cela devrait fonctionner, j'ai travaillé sur struts2 le long de 2 mois

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