Curso de Struts 2 | 1. Redireccionamientos

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.

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.