28 votes

Comment faire des redirections d'URL dynamiques dans Struts 2?

Je cherche à rediriger mon application Struts2 vers une URL générée. Dans ce cas, je veux que l'URL utilise la date actuelle, ou une date que j'ai recherchée dans une base de données. Ainsi, /section/document devient /section/document/2008-10-06

Quel est le meilleur moyen de le faire?

65voto

Johnny Wey Points 586

Voici comment nous le faisons:

Dans Struts.xml, avoir un résultat dynamique comme :

${url}

Dans l'action:

private String url;

public String getUrl()
{
 return url;
}

public String execute()
{
 [autres choses pour configurer votre date]
 url = "/section/document" + date;
 return "redirect";
}

Vous pouvez en fait utiliser cette même technologie pour définir des valeurs dynamiques pour n'importe quelle variable dans votre struts.xml en utilisant OGNL. Nous avons créé toutes sortes de résultats dynamiques incluant des liens RESTful. Choses cool.

16voto

On peut également utiliser annotations et le plug-in Convention pour éviter une configuration répétitive dans struts.xml :

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

Le ${url} signifie "utiliser la valeur de la méthode getUrl"

3voto

hari Points 501

Si quelqu'un veut rediriger directement dans 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(); 
}

Éditer: Ajout d'une quote manquante.

2voto

Sietse Points 3240

J'ai fini par sous-classer ServletRedirectResult de Struts et remplacer sa méthode doExecute() pour y insérer ma logique avant d'appeler super.doExecute(). Voici à quoi cela ressemble :

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);
  }
}

Je ne suis pas sûr que ce soit la meilleure façon de le faire, mais cela fonctionne.

1voto

tiwari.vikash Points 11

Vous pouvez rediriger vers une autre action en utilisant l'annotation -

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X