<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arragonán &#187; Struts</title>
	<atom:link href="http://www.danilat.com/weblog/category/programacion/java/struts/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.danilat.com/weblog</link>
	<description>Dani Latorre - Desarrollador y algunas cosas más</description>
	<lastBuildDate>Thu, 09 Feb 2012 00:58:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Integrar Spring y Struts</title>
		<link>http://www.danilat.com/weblog/2008/02/27/integrar-spring-y-struts/</link>
		<comments>http://www.danilat.com/weblog/2008/02/27/integrar-spring-y-struts/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 08:55:53 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[Struts]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/2008/02/27/integrar-spring-y-struts/</guid>
		<description><![CDATA[Hace ya algún tiempo que ando tocando algunas cosas de Spring framework. Un framework que simplifica el desarrollo de aplicaciones J2EE, que entre otras cosas nos permite desacoplar partes de nuestro código gracias a Spring IoC. A raíz de un post en programania, en donde explican dos formas de integrar spring con struts, voy a [...]]]></description>
			<content:encoded><![CDATA[<p>Hace ya algún tiempo que ando tocando algunas cosas de <a href="http://www.springframework.org/">Spring framework</a>. Un framework que simplifica el desarrollo de aplicaciones J2EE, que entre otras cosas nos permite desacoplar partes de nuestro código gracias a <a href="http://www.javaconganas.com/space/path/frameworks/spring/ioc">Spring IoC</a>.</p>
<p>A raíz de <a href="http://www.programania.net/programacion/orientada-a-objetos/spring-plugin-para-struts-13x/">un post en programania</a>, en donde explican dos formas de integrar spring con <a href="http://struts.apache.org/1.3.8/index.html">struts</a>, voy a aprovechar para explicar aquí las otras dos alternativas para hacerlo. </p>
<ul>
<li>
Nuestros Actions deben extender de <strong>ActionSupport</strong>: de esta forma se facilita la obtención del contexto de spring manualmente, que es la forma más sencilla de hacerlo. El problema, evidentemente que de esta forma las Actions de struts quedan muy aclopadas a spring.
</li>
<li>
Usando <strong>DelegatingRequestProcessor</strong> (o en el caso de usar Tiles <strong>DelegatingTilesRequestProcessor</strong>): le pasamos el manejo de las acciones a spring sobre-escribiendo el RequestProcessor de struts. De esta forma desacomplamos los Actions de spring, aunque nos puede surgir el problema que vayamos a usar un RequestProcessor propio, por lo que deberíamos usar el <strong>DelegatingActionProxy</strong>, que es la forma que explican en programania.
</li>
</ul>
<p>La pega que surge al delegar el manejo de los Actions a Spring con DelegatingRequestProcessor y DelegatingActionProxy, es que hay que definir en el beans.xml nuestros actions de struts. En el primer caso, en el struts-config definiremos (como siempre) nuestros actions, por lo que deberemos mantener las mismas actions en dos XML diferentes, sólo cambia que definimos:</p>
<p><code><strong>controller processorClass = "org.springframework.web.struts.DelegatingRequestProcessor"</strong></code></p>
<p>mientras que en el segundo, para cada action de struts-config le pondremos el type DelegatingActionProxy:</p>
<p><code><strong>type = "org.springframework.web.struts.DelegatingActionProxy"</strong></code></p>
<p>En conclusión, es recomendable delegar el manejo de las acciones a spring aunque tengamos que mantener dos XML diferentes, ya que la integración es más transparente y además tendremos la opción de utilizar Spring AOP. Mientras que extender de ActionSupport resultaría útil para utilizar varios contextos de spring distintos.</p>
<p>Para encontrar una explicación mucho más detallada y con ejemplos, en <a href="http://www-128.ibm.com/developerworks/java/library/j-sr2.html">developerWorks hay un artículo</a> disponible.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2008/02/27/integrar-spring-y-struts/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Fichero de la clase ByteStreamInfo de Struts</title>
		<link>http://www.danilat.com/weblog/2007/05/05/fichero-de-la-clase-bytestreaminfo-de-struts/</link>
		<comments>http://www.danilat.com/weblog/2007/05/05/fichero-de-la-clase-bytestreaminfo-de-struts/#comments</comments>
		<pubDate>Sat, 05 May 2007 16:11:57 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Struts]]></category>

		<guid isPermaLink="false">http://www.danilat.com/weblog/2007/05/05/fichero-de-la-clase-bytestreaminfo-de-struts/</guid>
		<description><![CDATA[Acabo de subir a este servidor la el fichero ByteStreamInfo.java clase ByteStreamInfo. Espero que le pueda ser útil a alguien.]]></description>
			<content:encoded><![CDATA[<p>Acabo de subir a este servidor la el fichero <a href="http://www.danilat.com/codigo/ByteStreamInfo.java">ByteStreamInfo.java</a> clase <a href="http://www.danilat.com/weblog/2007/03/06/bytestreaminfo-implementecion-de-la-interface-streaminfo/">ByteStreamInfo</a>.</p>
<p>Espero que le pueda ser útil a alguien.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2007/05/05/fichero-de-la-clase-bytestreaminfo-de-struts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apunte: Recuperar el directorio raíz del servidor en un Servlet y/o en un Action de Struts</title>
		<link>http://www.danilat.com/weblog/2007/03/13/apunte-recuperar-el-directorio-raiz-del-servidor-en-un-servlet-yo-en-un-action-de-struts/</link>
		<comments>http://www.danilat.com/weblog/2007/03/13/apunte-recuperar-el-directorio-raiz-del-servidor-en-un-servlet-yo-en-un-action-de-struts/#comments</comments>
		<pubDate>Tue, 13 Mar 2007 15:43:54 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Struts]]></category>

		<guid isPermaLink="false">http://www.danilat.com/wordpress/?p=45</guid>
		<description><![CDATA[Código para recuperar el directorio raíz de un servidor, en el contexto del Servlet: this.getServletContext().getRealPath("/") En un Action de Struts, simplemente debemos recuperar el servlet que se ejecuta: this.getServlet().getServletContext().getRealPath("/");]]></description>
			<content:encoded><![CDATA[<p>Código para recuperar el directorio raíz de un servidor, en el contexto del Servlet:</p>
<p><code>this.getServletContext().getRealPath("/")</code></p>
<p>En un Action de Struts, simplemente debemos recuperar el servlet que se ejecuta:</p>
<p><code>this.getServlet().getServletContext().getRealPath("/");</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2007/03/13/apunte-recuperar-el-directorio-raiz-del-servidor-en-un-servlet-yo-en-un-action-de-struts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ByteStreamInfo, implementeción de la interface StreamInfo</title>
		<link>http://www.danilat.com/weblog/2007/03/06/bytestreaminfo-implementecion-de-la-interface-streaminfo/</link>
		<comments>http://www.danilat.com/weblog/2007/03/06/bytestreaminfo-implementecion-de-la-interface-streaminfo/#comments</comments>
		<pubDate>Tue, 06 Mar 2007 15:43:20 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Struts]]></category>

		<guid isPermaLink="false">http://www.danilat.com/wordpress/?p=44</guid>
		<description><![CDATA[La semana pasada, me encontré con que tenía que descargar un array de bytes con Struts 1.2.9, como las implementaciones de la interface StreamInfo para los DownloadAction, no me valían, piqué mi propia implementación, por si alguien la necesita, la copio aquí: import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.struts.actions.DownloadAction.StreamInfo; /** * Implementacion completa de [...]]]></description>
			<content:encoded><![CDATA[<p>La semana pasada, me encontré con que tenía que descargar un array de bytes con <a target="_blank" href="http://struts.apache.org/">Struts</a> 1.2.9, como las implementaciones de la interface <a target="_blank" href="http://struts.apache.org/1.2.9/api/org/apache/struts/actions/DownloadAction.StreamInfo.html">StreamInfo</a> para los <a target="_blank" href="http://struts.apache.org/1.2.9/api/org/apache/struts/actions/DownloadAction.html">DownloadAction</a>,  no me valían, <em>piqué</em> mi propia implementación, por si alguien la necesita, la copio aquí:</p>
<p><code>import java.io.ByteArrayInputStream;<br />
import java.io.IOException;<br />
import java.io.InputStream;</p>
<p>import org.apache.struts.actions.DownloadAction.StreamInfo;</p>
<p>/**<br />
* Implementacion completa de la interfaz StreamInfo, para la descarga de bytes desde el servidor<br />
* @author dlatorre<br />
*<br />
*/<br />
public class ByteStreamInfo implements StreamInfo{<br />
private String contentType;<br />
private byte[] data;<br />
public ByteStreamInfo(String contentType,byte[] data){<br />
this.contentType=contentType;<br />
this.data=data;<br />
}</p>
<p>/**<br />
*  Retorna el content type del stream a descargar<br />
*/<br />
public String getContentType() {<br />
return contentType;<br />
}</p>
<p>/**<br />
* Retorna un input stream del array de bytes a descargar<br />
*/<br />
public InputStream getInputStream() throws IOException {<br />
InputStream inpt=new ByteArrayInputStream(data);<br />
return inpt;<br />
}<br />
}</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2007/03/06/bytestreaminfo-implementecion-de-la-interface-streaminfo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internacionalización con struts</title>
		<link>http://www.danilat.com/weblog/2007/02/26/internacionalizacion-con-struts/</link>
		<comments>http://www.danilat.com/weblog/2007/02/26/internacionalizacion-con-struts/#comments</comments>
		<pubDate>Mon, 26 Feb 2007 15:38:33 +0000</pubDate>
		<dc:creator>dani</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Struts]]></category>

		<guid isPermaLink="false">http://www.danilat.com/wordpress/?p=38</guid>
		<description><![CDATA[Existen dos formas de configurar los .properties para la internacionalización en struts: en struts-config.xml: null(opcional[true]),si null=true da una excepcion si no encuentra la clave, si null=false muestra &#8220;???nombreclave???&#8221; key(opcional)clave para guardar el bundle como un atributo del ServletContext. en web.xml: action org.apache.struts.action.ActionServlet application paquete1.paquete2.ApplicationResources Ejemplo de ApplicationResources.properties: prueba.titulo= Bienvenido a la web prueba.fecha=Fecha En las [...]]]></description>
			<content:encoded><![CDATA[<p>Existen dos formas de configurar los .properties para la internacionalización en struts:</p>
<p>en struts-config.xml:</p>
<p><code><message-resources parameter="paquete1.paquete2.ApplicationResources" null="false" key="probatinas"/> </code></p>
<p>null(opcional[true]),si null=true da una excepcion si no encuentra la clave, si null=false muestra &#8220;???nombreclave???&#8221;</p>
<p>key(opcional)clave para guardar el bundle como un atributo del ServletContext.</p>
<p>en web.xml:</p>
<p><code><servlet><br />
<servlet-name>action</servlet-name><br />
<servlet-class><br />
org.apache.struts.action.ActionServlet<br />
</servlet-class><br />
<init-param></p>
<param-name>
application
</param-name>
<param-value>
paquete1.paquete2.ApplicationResources
</param-value>
</init-param><br />
</servlet></code></p>
<p>Ejemplo de ApplicationResources.properties:<br />
prueba.titulo= Bienvenido a la web<br />
prueba.fecha=Fecha</p>
<p>En las jsp la directiva:</p>
<p><code><%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %></code></p>
<p>Para mostrar el mensaje internacionalizado:</p>
<p><code><bean:message key="prueba.titulo"/><br />
<bean:message bundle="probatinas" key="prueba.titulo"/</code>> recupera el bundle del atributo del ServletContext</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilat.com/weblog/2007/02/26/internacionalizacion-con-struts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

