Comment implémenter le pattern Post/Redirect/Get avec Struts2
Après avoir vu comment implémenter le design pattern Post/Redirect/Get avec des servlets, voici comment faire avec le framework Struts2 :
Environnement de développement :
jdk1.7
Eclipse Indigo
Tomcat 7.0.12
Tout d’abord, l’action Struts2 redirigeant vers la page index.jsp :
import com.opensymphony.xwork2.ActionSupport;
public class IndexAction extends ActionSupport {
private boolean confirm;
public String execute() throws Exception {
return SUCCESS;
}
public boolean isConfirm() {
return confirm;
}
public void setConfirm(boolean confirm) {
this.confirm = confirm;
}
}
Ensuite, la JSP index.jsp contenant un formulaire avec un bouton submit :
<!DOCTYPE html> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@taglib prefix="s" uri="/struts-tags" %> <html> <body> <s:if test="confirm" > L'article a bien été ajouté au panier. </s:if> <s:else> Cliquer pour ajouter l'article au panier. </s:else> <s:form action="prgAction"> <s:submit /> </s:form> </body> </html>
Ensuite, l’action Struts2 vers laquelle le formulaire est posté, qui effectue la redirection 302 vers une autre action Struts2. Contrairement au code utilisant des servlets, Struts2 ne permet pas de définir le code HTTP 303 pour la redirection.
import com.opensymphony.xwork2.ActionSupport;
public class PRGAction extends ActionSupport {
public String execute() throws Exception {
return "redirect";
}
}
Enfin, le fichier de configuration struts.xml :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="myPackage" extends="struts-default">
<action name="index" class="IndexAction">
<result>/jsp/index.jsp</result>
</action>
<action name="prgAction" class="PRGAction">
<result name="redirect" type="redirectAction">
<param name="actionName">index</param>
<param name="confirm">true</param>
</result>
</action>
</package>
</struts>
