Domanda

Sto cercando di reindirizzare la mia app Struts2 a un URL generato. In questo caso, voglio che l'URL utilizzi la data corrente o una data che ho cercato in un database. Quindi / section / document diventa /section/document/2008-10-06-06//code>

Qual è il modo migliore per farlo?

È stato utile?

Soluzione

Ecco come lo facciamo:

In Struts.xml, ottieni un risultato dinamico come:

<result name="redirect" type="redirect">${url}</result>

Nell'azione:

private String url;

public String getUrl()
{
 return url;
}

public String execute()
{
 [other stuff to setup your date]
 url = "/section/document" + date;
 return "redirect";
}

Puoi effettivamente utilizzare questa stessa tecnologia per impostare valori dinamici per qualsiasi variabile nel tuo struts.xml usando OGNL. Abbiamo creato tutti i tipi di risultati dinamici, inclusi elementi come i collegamenti RESTful. Roba interessante.

Altri suggerimenti

Uno può anche usare annotazioni e il plug-in Convention per evitare configurazioni ripetitive in struts.xml:

@Result(location="${url}", type="redirect")

$ {url} significa " usa il valore del metodo getUrl "

Se qualcuno vuole reindirizzare direttamente in ActionClass :

public class RedirecActionExample extends ActionSupport {
HttpServletResponse response=(HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);

    url="http://localhost:8080/SpRoom-1.0-SNAPSHOT/"+date;
    response.sendRedirect(url);
    return super.execute(); 
}

Modifica: aggiunta una citazione mancante.

Ho finito la sottoclasse del ServletRedirectResult di Struts e ho ignorato il suo metodo doExecute () per eseguire la mia logica prima di chiamare super.doExecute () . sembra così:

public class AppendRedirectionResult extends ServletRedirectResult {
   private DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

  @Override
  protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
    String date = df.format(new Date());
    String loc = "/section/document/"+date;
    super.doExecute(loc, invocation);
  }
}

Non sono sicuro che questo sia il modo migliore per farlo, ma funziona.

Puoi reindirizzare a un'altra azione usando l'annotazione -

@Result(
    name = "resultName",
    type = "redirectAction",
    params = { "actionName", "XYZAction" }
)

Si può reindirizzare direttamente da un intercettore senza riguardo a quale azione è coinvolta.

In struts.xml

    <global-results>
        <result name="redir" type="redirect">${#request.redirUrl}</result>
    </global-results>

In Interceptor

@Override
public String intercept(ActionInvocation ai) throws Exception
{
    final ActionContext context = ai.getInvocationContext();        
    HttpServletRequest request = (HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST);
    request.setAttribute("redirUrl", "http://the.new.target.org");
    return "redir";
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top