domingo, 19 de abril de 2015

Interceptores en Struts2

Introduccion

Los interceptores procesan una invocacion a Action antes y despues de cada llamada. La mayor parte de la funcionalidad del framework esta implementada mediante interceptores. De esta manera se aplican los filtros ante multiples submits, conversion de tipos, propagacion de objetos, la validacion, el upload de ficheros, la preparacion de pagina y más. Es posible aplicar una pila especifica de ellos de manera que establezcamos que caracteristicas necesita soportar una Action.

Ciclo de vida de una Action

schema

 

Las clases de interceptor se declaran tambien en el fichero de configuración struts.xml utilizando un par clave valor. Los nombres especificados más abajo vienen predeclarados en el fichero struts-default.xml. Es posible declarar nuestros propios interceptores creados para lo cual indicamos el nombre y la clase dentro de la etiqueta.

Lista de Interceptores:

Interceptor

Name

Description

Alias Interceptor

alias

Transforma el nombre de parametros que se envían con distinto nombre en las distintas request.

Chaining Interceptor

chain

Hace que las propiedades de la Action anterior esten disponibles en la Action en curso. Se usa comúnmente con el <result type="chain"> (de la acción precedente).

Checkbox Interceptor

checkbox

Añade un código automático para gestionar los checkbox no inicializados y los añade como parámetros en la request con un valor por defecto (generamente "false"). Utiliza campos hidden para detectar campos que no se han marcado. Se puede modificar el valor que inicia al principio.

Cookie Interceptor

cookie

Inyecta una cookie con un par nombre-valor configurable en la accion (Since 2.0.7.)

CookieProvider Interceptor

cookieProvider

Inyecta cookies desde la acción hacia la response (Since 2.3.15.)

Conversion Error Interceptor

conversionError

Inyecta errores de tipo conversion errors from the ActionContext to the Action's field errors

Create Session Interceptor

createSession

Crea una sesión HttpSession automaticamente, útil con ciertos interceptores, por ejemplo para funcionar correctamente con el el interceptor de tipo TokenInterceptor

DebuggingInterceptor

debugging

Aporta varias plantillas de depuración para entender lo que ocurre detrás de la página.

DeprecationInterceptor

deprecation

Cuand devMode está activado, marca toda configuración desconocida o desestimada (deprecated) settings

Execute and Wait Interceptor

execAndWait

Ejecuta la Action en segundo plano y a continuación reenvia una respuesta hacia una página intermedia de espera.

Exception Interceptor

exception

Mapea las excepciones hacia un <result ...>

File Upload Interceptor

fileUpload

Un Interceptor que facilita el upload de ficheros.

I18n Interceptor

i18n

Guarda la configuración de locale guardada para una user's session.

Logger Interceptor

logger

Escribe el nombre de la Action hacia un <result...>.

Message Store Interceptor

store

Guarda y recupera mensajes de tipo "action messages / errors / field errors" para una acción que implemente la interfaz ValidationAware, dentro de la sesion.

Model Driven Interceptor

modelDriven

Si la Action implementa ModelDriven, apila el resultado de  getModel dentro del Value Stack.

Scoped Model Driven Interceptor

scopedModelDriven

Si la Action implementa ScopedModelDriven, el interceptor recupera ell modelo de la sesion, request, y lo copia en la Action en curso con la llamada setModel.

Parameters Interceptor

params

Establece los parametros de la request en la Action.

Prepare Interceptor

prepare

Si la Action implementa la interfaz Preparable, se realiza la llamada al método prepare.

Scope Interceptor

scope

Es un sencillo mecanismo para almacenar los parametros de la Action en distintos scopes.

Servlet Config Interceptor

servletConfig

Permite acceder a HttpServletRequest and HttpServletResponse.

Static Parameters Interceptor

staticParams

Establece los parametros declarados en struts.xml dentro de la Action. Estos se corresponden con <param> dentro de <action>.

Roles Interceptor

roles

Una Action solo se ejecutara si el usuario tiene el role de JAAS correcto.

Timer Interceptor

timer

Devuelve el tiempo que lleva la Action ejecutandose (incluido sus interceptores anidados y la vista)

Token Interceptor

token

Verifica la presencia de un token dentro de la Action, lo que previene de request con el mismo contenido (multiple submission).

Token Session Interceptor

tokenSession

Lo mísmo que el Interceptor de tipo Token, pero almacena los datos almacenados en la sesion cuando se ha interceptado un token invalido.

Validation Interceptor

validation

Realiza la validacion a partir de los validators declarados en  action-validation.xml

Default Workflow Interceptor

workflow

Llama el método validate en nuestra clase de tipo Action. Si los errores de tipo Action se crean entonces se devuelve la vista INPUT.

Parameter Filter Interceptor

N/A

Elimina parametros de la lista de parametros accesibles a la Action.

Profiling Interceptor

profiling

Activa el profiling entre parametros

Multiselect Interceptor

multiselect

Como el interceptor de tipo checkbox, detecta que no hay valores seleccionados para un campo con muchos valores (al igual que vimos en el Interceptor de tipo Checkbox).

Desde la version 2.0.7, los nombres de Interceptors y Results pasaron a camelCase. (El modelo principal model-driven es ahora modelDriven.) Los nombre antiguos se guardan como "alias" hasta la verion Struts 2.1.0. Las versiones que utilizan la notación hyphen no se listan aqui, pero pueden encontrarse en documentaciones anteriores.