Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
En esta lección aprenderemos a manejar los redireccionamientos en Struts 2. Este tema es clave para controlar el flujo de navegación dentro de nuestras aplicaciones web, permitiéndonos dirigir al usuario a diferentes vistas o acciones según las necesidades de la lógica del negocio.
Redireccionamiento directo
/index.jsp
<a href="enlace.action">Enlace</a>
Con este enlace, enviamos una solicitud a la acción configurada en Struts 2. Para que funcione, necesitamos definir la acción en nuestro archivo de configuración.
WebContent/WEB-INF/web.xml
<?xml version="1.0" encoding="utf-8" ?>
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
src/struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="com.pablomonteserin.action" extends="struts-default">
<action name="enlace">
<result>/pagina2.jsp</result>
</action>
</package>
</struts>
En este ejemplo, la acción accion
redirige directamente a la página pagina2.jsp
.
pagina2.jsp
Llegamos a ĺa página 2
Descarga (utilizaremos este ejercicio como base para los siguientes)
Redireccionamiento al método execute del action
Si deseamos que el flujo pase por un método en nuestra clase Action, configuramos de la siguiente forma:
index.jsp
<a href="accion.action">Enlace a acción</a>
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="com.pablomonteserin.action" extends="struts-default">
<action name="accion" class="com.pablomonteserin.action.SaludarAction">
<result>/pagina2.jsp</result>
</action>
</package>
</struts>
SaludarAction.java
public class SaludarAction extends ActionSupport {
private String resultado;
public String execute(){
resultado = "Hola Pablo";
return SUCCESS;
}
//getters y setters el atributo resultado
}
pagina2.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<h2><s:property value="resultado" /></h2>
En este caso, el método execute
se ejecuta antes de redirigir a pagina2.jsp
, estableciendo un atributo llamado resultado
.
Redireccionamiento a un método concreto del action
index.jsp
<a href="accion2.action">Enlace a acción</a>
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="com.pablomonteserin.action" extends="struts-default">
<action name="accion2" class="com.pablomonteserin.action.SaludarAction" method="saludar">
<result>/pagina2.jsp</result>
</action>
</package>
</struts>
SaludarAction.java
public class SaludarAction extends ActionSupport {
private String resultado;
public String saludar(){
resultado = "Hola Juan";
return SUCCESS;
}
//getters y setters para el atributo resultado
}
pagina2.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<h2><s:property value="resultado" /></h2>
Redireccionamiento a un método con paso de parámetros
Debemos definir estos parámetros como atributos globales dentro del action y hacer sus correspondientes getters y setters
La salida de un action es la entrada de otro
struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="com.pablomonteserin.action" extends="struts-default">
<action name="accionRedireccion" class="com.pablomonteserin.action.SaludarAction" method="saludar">
<result type="redirectAction">accion3</result>
</action>
</package>
</struts>
Notas:
Si usamos type=»chain», redireccionaremos a otro bean, pero cuando finalmente vayamos a un jsp, le llegará la información del penúltimo action ejecutado.
Errores típicos
Error 404
Es posible que en el struts.xml se haga referencia a una clase Java que realmente no existe.