AOWS

Just another adrian’s weblog

Redireccionar tras un envío de formulario en portlets usando Spring

with one comment

Spring permite manejar los formularios de una manera más o menos cómoda y eficiente. Sin embargo, la especificación JSR 168 de los portlets limita y mucho el control del flujo de la aplicación.

Así, variar el comportamiento por defecto al procesar un envío no es algo trivial. Al configurar el controlador de un formulario tal y como vemos a continuación:

<bean id="exampleFormController" class="ws.otero.adrian.sample.controller.actions.ExampleFormControllerAction">
	<property name="commandName" value="exampleForm" />
	<property name="commandClass" value="ws.otero.adrian.sample.controller.forms.ExampleForm" />
	<property name="sessionForm" value="true" />
	<property name="formView" value="example" />
	<property name="successView" value="example" />
</bean>

el controlador procesa los datos enviados para luego redirigir al jsp (o la tecnología que usemos para la capa vista) indicado en la propiedad successView. ¿Cómo podemos cambiar este comportamiento, y llevar al usuario a otro controlador, o incluso más complicado (aunque no lo parezca) al mismo formulario de nuevo?

Antes de nada, sería conveniente leer algo de documentación sobre la especificación de los portlets (por ejemplo: Introduction to the Java Portlet Specification) y comprender cómo funcionan (principalmente conocer las fases de todo portlet, muy importantes sobre todo en formularios: action y render).

Así, para conseguir lo que queremos y variar el flujo, debemos “colarnos” entre ambas fases y dependiendo de lo procesado en la action phase modificar los parámetros de renderizado.

Si lo que queremos es redirigir a otro controlador, simplemente debemos hacer lo siguiente al concluir el procesado del formulario:

response.setRenderParameter("action", "anotherController");

Utilizando el mismo método podríamos enganchar cuantos parámetros quisiéramos, muy útil en el caso expuesto a continuación. El principal problema consistía en un formulario de modificación, cuyo comportamiento tras clickar en el botón de envío debía ser el regreso al mismo formulario.

El problema es que Spring añade sus propios parámetros para indicar, entre otras cosas, el resultado del envío del formulario. Para conseguir lo que queremos, debemos limpiar los parámetros y dejar sólo los que deseemos.

PortletUtils.clearAllRenderParameters(response);
response.setRenderParameter("action", "exampleForm");
response.setRenderParameter("idBean", String.valueOf(bean.getId()));

Con el código anterior conseguiríamos una llamada limpia (por llamarlo de alguna manera), llegando de nuevo al formulario con el identificador del objeto que estemos modificando.

Written by adrian

17 enero, 2008 a 23:07

Publicado en Posts

Tagged with , , ,

Una respuesta

Subscribe to comments with RSS.

  1. Esta muy bien el post, pero te falta incluir que esto lo tienes que hacer porque utilizas el ParameterMappingInterceptor dentro del mapping del PortletModeParameterHandlerMapping. Si no utilizas el ParameterMappingInterceptor no tendrías problema por utilizar el sendRedirect

    un saludo

    Jorge

    25 junio, 2008 at 15:20


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: