Struts2 Acción para escribir directamente en el response

Puede resultar interesante escribir una acción de Struts2 que no tenga ninguna vista como resultado, y escriba directamente en el outputstream del response.

Un ejemplo puede ser una acción que es invocada a través de AJAX y solamente quiere devolver un texto plano sin ningún tipo de formato.

El problema es que en el archivo struts.xml, para cada acción se deberá especificar un resultado. Nuestra acción, al no tener vista no debería tener. Podemos poner uno inventado.

<action name="jqueryRate">	
<result>nosecarganunca.jsp</result>
</action>

Dentro de nuestra acción, para poder tener acceso a los objeto Response y Request, se implementarán sendas interfaces, que posibilitan la inyección de las dependencias de estos objetos por parte del framework:

public class jqueryRate extends ActionSupport implements
ServletRequestAware, ServletResponseAware {
private HttpServletRequest request;       //atributo en la acción para el request
private HttpServletResponse response;

Obviamente se implementan los métodos requeridos por estas interfaces, haciendo la asignación a los dos atributos.

public void setServletRequest(HttpServletRequest hsr)
{
	this.request = hsr;
}
public void setServletResponse(HttpServletResponse hsr)
{
	this.response = hsr;
}

Para escribir en el response directamente se debe tomar su stream:

ServletOutputStream sos;
sos = response.getOutputStream();
sos.println("Esta es la respuesta directamente en el response");

Y finalmente el toque final para saltar el requerimiento del resultado en forma de vista: devolver null como resultado del execute

return null;
Anuncios

One comment

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