- pom.xml: Se deben añadir algunas dependencias tales como y los repositorios:
- <dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.2.1</version>
</dependency> - <dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency> - <dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency> - <repositories>
<repository>
<id>repo de maven</id>
<url>http://repo1.maven.org/maven2/</url>
</repository>
<repository>
<id>repo de jboss</id>
<url>http://repository.jboss.org/maven2/</url>
</repository>
</repositories>
- web.xml: Incluimos los siguientes filtros:
- <filter>
<filter-name>action2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>action2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> - <filter>
<filter-name>hibernate</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>mySessionFactory</param-value>
</init-param>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernate</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
EL QUE SE PRESENTA A CONTINUACIÓN DEBE SER EL PRIMERO QUE SE MAPEA: para que Hibernate tenga siempre abierta la sesion:
INCLUIMOS EL FICHERO DE CONFIGURACION DE STRUTS2
- struts.xml:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
....
</struts>
EXISTE UN FICHERO ADICIONAL DE PROPIEDADES struts.properties
ACTIONS:
class MyAction {
public void String execute() throws Exception {
if( myLogicWorked() ) {
return "success";
} else {
return "error";
}
}
}
SE DA DE ALTA EN struts.xml:
<action name="my" class="com.fdar.infoq.MyAction" >
<result> view.jsp</result>
<result name="error"> error.jsp</result> <!-- Reenvio en la validacion -->
</action>
INTERCEPTORS
<interceptors>
...
<interceptor name="autowiring"
class="interceptor.ActionAutowiringInterceptor"/>
</interceptors>
//Y EN LA ACCION
<action name="my" class="com.fdar.infoq.MyAction" >
<result> view.jsp</result>
<interceptor-ref name="autowiring"/>
</action>
//Ó DEFAULT PARA PAQUETE
<default-interceptor-ref name="autowiring"/>
debido a la tendencia de struts2 a los interceptores, cuando son muchos los que hay que aplicar
<interceptor-stack name="basicStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="servlet-config"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
</interceptor-stack>
y se aplica en la accion:
<action name="my" class="com.fdar.infoq.MyAction" >
<result>view.jsp</result>
<interceptor-ref name="basicStack"/>
</action>
- INTERCEPTORES PROPIOS
public interface Interceptor extends Serializable {
void destroy();
void init();
String intercept(ActionInvocation invocation)
throws Exception;
}
Al implementar esta interfaz podemos heredar de AbstractInterceptor para facilitar la implementacion (limitacion de inicializacion/create y limpieza/destroy)
La clase ActionInvocation nos permite acceder a todo el contexto de la acción: target, parametros, excepciones, invocacion y valor de retorno
No hay comentarios:
Publicar un comentario