Struts2: cuando la vista es un stream (JSON, plain text…) y no un JSP

Hay ocasiones en las que el MVC de Struts2 no tiene por qué tienes como vista una página JSP o HTML al uso, sino que queremos escribir directamente en la salida de datos a través de un stream. Tal es el caso de una acción que responde con un código (un ID por ejemplo) a una llamada AJAX, que lee la respuesta en Javascript para confirmar que la operación se ha llevado a cabo.

Para ello tenemos que definir un tipo especial de resultado en el fichero struts.xml, de tipo “stream”. Dentro, podemos configurar el formato de la cabecera HTTP que indica el contentType, así como el nombre del inputStream que se usará para escribir los resultados. Lo que escribamos en este stream será lo que devuelva como vista el servidor.

<action name="MiAccion" method="create" class="com.wordpress.mysticalpotato.acciones.MiAccion">
<result type="stream" name="success">
<param name="contentType">plain/text</param>
<param name="inputName">inputStream</param>
</result>
</action>

El siguiente paso es editar la acción (controlador) de struts2. Como siempre, tendremos un fichero con un método llamado “create” (no es necesario, pero la acción de ejemplo tiene otros métodos que responden a diferentes patrones de URL, de ahí que se haya indicado) que tiene como salida un String.


public class MiAccion extends ActionSupport

{

private InputStream inputStream;//Salida para escribir directamente

public String create()

{

String miRespuesta = "666";

inputStream = new StringBufferInputStream(miRespuesta );

return SUCCESS

}

public InputStream getInputStream()

{

return inputStream;

}

Simplemente con este código, le indicaremos, que en la salida SUCCESS (viene del atributo del ActionSupport) tiene que tomarla del inputStream. Nótese cómo el inputStream es un atributo de la clase entera. Además, hay un getter para este atributo para exponer al framework dicho stream.

La salida será “666” en una comunicación HTTP con content-type: plain/text que puede ser leída perfectamente desde Javascript como respuesta a una llamda AJAX

Anuncios

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