Domanda

sto usando Puntoni 2.

Vorrei tornare da un'azione alla pagina che l'ha richiamata.

Diciamo che sono in pagina x.jsp, invoco l'azione visiva per modificare le preferenze CSS nella sessione;Voglio tornare a x.jsp piuttosto che a una pagina fissa (ad es. home.jsp)

Ecco la cosa rilevante puntoni.xml frammento:

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

Ovviamente il mio VisualizationAction.execute() ritorna casa.

Esiste qualche costante "magica" (come, ad esempio, INPUT_PAGE) che potrei restituire per eseguire il trucco?

Devo usare un metodo più complicato (ad es.estrarre la pagina di richiesta e inoltrarla)?

T.I.A.

È stato utile?

Soluzione

È possibile utilizzare un risultato dinamico in struts.xml.Ad esempio:

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

Quindi nella tua azione crei un campo chiamato next.Quindi per invocare l'azione passerai il nome della pagina a cui vuoi inoltrare successivamente.L'azione quindi restituisce "successivo" e Struts saprà a quale pagina andare.

C'è una spiegazione più carina in questo post: Overflow dello stack

Altri suggerimenti

return INPUT;

farà il trucco.La costante INPUT è definita nell'interfaccia stessa dell'azione.Indica che l'azione richiede più input.

Chiamando pagina se intendevi la pagina che ti ha portato alla pagina di input dell'azione, la tua pagina di input dovrà memorizzare l'intestazione HTTP "Referer" nell'ambito della richiesta per l'azione.

La mia soluzione comporterebbe un'interfaccia e un intercettore.Implementa la seguente interfaccia per tutte le azioni a cui probabilmente vorrai reindirizzare:

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

L'interceptor garantisce semplicemente che il target sia impostato, se necessario:

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 */ }
}

Da quel momento in poi, una volta che questi due bit sono a posto e le tue azioni implementano il TargetAware (se prevedi di dover reindirizzare a loro), allora hai accesso a a target parametro nei tuoi JSP ogni volta che ne hai bisogno.Passa quel parametro al tuo VisualizationAction (che potrebbe anche implementare anche il file TargetAware interfaccia!), e così via SUCCESS, reindirizzamento come spiegato da 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>

Non ho provato ogni singolo dettaglio di questa strategia.In particolare, fare attenzione alla notazione che circonda il file redirect tipo di risultato (a seconda della versione specifica di Struts2:2.0.x e 2.1.x potrebbero differire in questo...).

Preferisco il modo in cui navighi tra gli utenti tramite azioni particolari.

http://dominio.com/miaazione.azione

Potresti utilizzare alcuni parametri come indicatore che desideri modificare il design corrente:cioè.

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

Quindi, scrivi alcuni struts 2 interceptor, la cui logica è quella di verificare la presenza di tale parametro "changeDesign", e questo interceptor farà il lavoro necessario per modificare il design e controllerà il flusso di lavoro.Con interceptor disaccoppia le tue azioni dalla logica trasversale.

ok, nella tua classe it.___.web.actions.VisualizationAction, devi restituire un valore stringa contenente INPUT, poi, su struts.xml devi impostare qualcosa del genere:

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

questo ti porterà alla pagina che desideri.Dovrebbe funzionare, ho lavorato su struts2 per 2 mesi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top