<?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>.:: Seam City ::. &#187; tips</title>
	<atom:link href="http://seamcity.madeinxpain.com/archives/tag/tips/feed" rel="self" type="application/rss+xml" />
	<link>http://seamcity.madeinxpain.com</link>
	<description>Sobre programación en general, y Seam en particular</description>
	<lastBuildDate>Thu, 22 Jan 2009 15:35:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Marcas de Google Maps con menu contextual</title>
		<link>http://seamcity.madeinxpain.com/archives/marcas-de-google-maps-con-menu-contextual</link>
		<comments>http://seamcity.madeinxpain.com/archives/marcas-de-google-maps-con-menu-contextual#comments</comments>
		<pubDate>Fri, 04 Jul 2008 08:34:49 +0000</pubDate>
		<dc:creator>Tes</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[google-maps]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://seamcity.madeinxpain.com/?p=45</guid>
		<description><![CDATA[En un post anterior hablaba de como añadir un tooltip personalizado a nuestras marcas de google maps, que permitia mostrar cualquier objeto DOM como si fuese un tooltip de la marca.
Siguiendo la misma idea, podemos hacer un menu contextual para las marcas, que se active al hacer click sobre ellas, y contenga acciones a ejecutar [...]]]></description>
			<content:encoded><![CDATA[<p>En un <a href="http://http://seamcity.madeinxpain.com/archives/marcas-de-google-maps-con-tooltip-personalizado" >post anterior</a> hablaba de como añadir un tooltip personalizado a nuestras marcas de google maps, que permitia mostrar cualquier objeto DOM como si fuese un tooltip de la marca.</p>
<p>Siguiendo la misma idea, podemos hacer un menu contextual para las marcas, que se active al hacer click sobre ellas, y contenga acciones a ejecutar sobre la marca en cuestion.</p>
<p>Para ello seguiremos los siguientes pasos:</p>
<ol>
<li>Crear el menu y sus acciones</li>
<li>Asignar el menu a la marca, y una referencia de la marca al menu para poder ejecutar acciones sobre ella</li>
<li>Mostrar el menu con el evento onclick y ocultarlo al seleccionar una opción</li>
</ol>
<p><a href="http://seamcity.madeinxpain.com/examples/gmap/menu.html" >ver ejemplo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://seamcity.madeinxpain.com/archives/marcas-de-google-maps-con-menu-contextual/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Marcas de Google Maps con tooltip personalizado</title>
		<link>http://seamcity.madeinxpain.com/archives/marcas-de-google-maps-con-tooltip-personalizado</link>
		<comments>http://seamcity.madeinxpain.com/archives/marcas-de-google-maps-con-tooltip-personalizado#comments</comments>
		<pubDate>Tue, 01 Jul 2008 06:12:33 +0000</pubDate>
		<dc:creator>Tes</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[google-maps]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://seamcity.madeinxpain.com/?p=44</guid>
		<description><![CDATA[Al situar el ratón encima de una imagen o cualquier elemento del DOM, éste es capaz de mostrar en un tooltip el texto de su atributo 'title',
ejemplo
En las marcas de Google Maps este efecto puede conseguirse especificando el atributo 'title' en el constructor de la marca.


var coords = new GLatLng&#40;41.647471, -0.885569&#41;;
var mark = new GMarker&#40;coords,&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Al situar el ratón encima de una imagen o cualquier elemento del DOM, éste es capaz de mostrar en un tooltip el texto de su atributo 'title',</p>
<div style="display:inline;padding:2px 5px 2px 5px;background-color:#ccaaaa" title="texto de ejemplo">ejemplo</div>
<p>En las marcas de Google Maps este efecto puede conseguirse especificando el atributo 'title' en el constructor de la marca.</p>
<div class="syntax_hilite">
<div id="javascript-2">
<div class="javascript"><span style="color: #003366; font-weight: bold;">var</span> coords = <span style="color: #003366; font-weight: bold;">new</span> GLatLng<span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">41</span>.<span style="color: #CC0000;">647471</span>, -<span style="color: #CC0000;">0</span>.<span style="color: #CC0000;">885569</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #003366; font-weight: bold;">var</span> mark = <span style="color: #003366; font-weight: bold;">new</span> GMarker<span style="color: #66cc66;">&#40;</span>coords,&nbsp; <span style="color: #66cc66;">&#123;</span>title:<span style="color: #3366CC;">'texto de ejemplo'</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span></div>
</div>
</div>
<p>
<a href="http://seamcity.madeinxpain.com/examples/gmap/basic.html" >ver ejemplo</a></p>
<p>El problema es que esta opción es muy limitada, ya que se restringe al uso de texto plano. Lo ideal sería poder mostrar cualquier elemento del DOM que queramos, con su HTML y su CSS.<br />
Para conseguirlo vamos a seguir estos pasos:</p>
<ol>
<li>Crear el nodo del DOM que queramos mostrar o coger un nodo ya existente y ponerlo como un atributo de la marca</li>
<li>Al escuchar el evento mouseover de la marca, añadir el nodo al div contenedor del mapa en el la posición en la que se encuentra la marca</li>
<li>Al escuchar el evento mouseout de la marca, eliminar el nodo del div contenedor del mapa para ocultarlo.</li>
</ol>
<p><a href="http://seamcity.madeinxpain.com/examples/gmap/tooltip.html" >ver ejemplo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://seamcity.madeinxpain.com/archives/marcas-de-google-maps-con-tooltip-personalizado/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo limitar el zoom y el desplazamiento en Google Maps</title>
		<link>http://seamcity.madeinxpain.com/archives/como-limitar-el-zoom-y-el-desplazamiento-en-google-maps</link>
		<comments>http://seamcity.madeinxpain.com/archives/como-limitar-el-zoom-y-el-desplazamiento-en-google-maps#comments</comments>
		<pubDate>Fri, 20 Jun 2008 08:43:58 +0000</pubDate>
		<dc:creator>Tes</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[google-maps]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://seamcity.madeinxpain.com/?p=46</guid>
		<description><![CDATA[En ocasiones nos interesa restringir el desplazamiento del usuario sobre el mapa a un área determinada, o limitar los niveles de zoom máximo y mínimo.
En el caso del zoom la solución es bastante sencilla. Solo hay que sobreescribir los métodos getMinimumResolution() y getMaximumResolution() de cada uno de los tipos de mapas GMapType presentes en nuestro [...]]]></description>
			<content:encoded><![CDATA[<p>En ocasiones nos interesa restringir el desplazamiento del usuario sobre el mapa a un área determinada, o limitar los niveles de zoom máximo y mínimo.</p>
<p>En el caso del zoom la solución es bastante sencilla. Solo hay que sobreescribir los métodos getMinimumResolution() y getMaximumResolution() de cada uno de los tipos de mapas GMapType presentes en nuestro mapa.<br />
Para el caso del desplazamiento, la solución es algo más compleja. Consiste en escuchar el evento <em>move</em>, que es lanzado por el objeto GMap cuando hay un desplazamiento, y comprobar las coordenadas del mapa tras el desplazamiento. Si estas coordenadas quedan fuera del área a la que queremos limitar el desplazamiento, usamos el metodo GMap.setCenter para que el mapa quede dentro de nuesta área.</p>
<p>Esta clase implementa la funcionalidad deseada:</p>
<div class="syntax_hilite">
<div id="javascript-4">
<div class="javascript"><span style="color: #009900; font-style: italic;">/******&nbsp; TRestricter&nbsp; **********************************************/</span></p>
<p><span style="color: #009900; font-style: italic;">// Constructor</span><br />
TRestricter = <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>map<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">map</span> = map;<br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #009900; font-style: italic;">// Función que activa la limitación del desplazamiento entre la esquina inferior izquierda</span><br />
<span style="color: #009900; font-style: italic;">// y la esquina superior derecha</span><br />
TRestricter.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">restrict</span> = <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>sw, ne<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">map</span>._allowedBounds = <span style="color: #003366; font-weight: bold;">new</span> GLatLngBounds<span style="color: #66cc66;">&#40;</span>sw, ne<span style="color: #66cc66;">&#41;</span>;<br />
GEvent.<span style="color: #006600;">addListener</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">map</span>, <span style="color: #3366CC;">'move'</span>, <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">checkBounds</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #009900; font-style: italic;">// Función que desactiva la limitación del desplazamiento</span><br />
TRestricter.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">unrestrict</span> = <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">map</span>._allowedBounds = <span style="color: #003366; font-weight: bold;">null</span>;<br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #009900; font-style: italic;">// Listener encargado de comprobar el desplazamiento</span><br />
TRestricter.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">checkBounds</span> = <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>!<span style="color: #000066; font-weight: bold;">this</span>._allowedBounds || <span style="color: #000066; font-weight: bold;">this</span>._allowedBounds.<span style="color: #006600;">contains</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">getCenter</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span>;<br />
<span style="color: #003366; font-weight: bold;">var</span> x = Math.<span style="color: #006600;">min</span><span style="color: #66cc66;">&#40;</span>Math.<span style="color: #006600;">max</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">getCenter</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">lng</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #000066; font-weight: bold;">this</span>._allowedBounds.<span style="color: #006600;">getSouthWest</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">lng</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #000066; font-weight: bold;">this</span>._allowedBounds.<span style="color: #006600;">getNorthEast</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">lng</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #003366; font-weight: bold;">var</span> y = Math.<span style="color: #006600;">min</span><span style="color: #66cc66;">&#40;</span>Math.<span style="color: #006600;">max</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">getCenter</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">lat</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #000066; font-weight: bold;">this</span>._allowedBounds.<span style="color: #006600;">getSouthWest</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">lat</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #000066; font-weight: bold;">this</span>._allowedBounds.<span style="color: #006600;">getNorthEast</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">lat</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">setCenter</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> GLatLng<span style="color: #66cc66;">&#40;</span>y,x<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #009900; font-style: italic;">// Establece los límites de zoom del mapa</span><br />
TRestricter.<span style="color: #006600;">prototype</span>.<span style="color: #006600;">zoomLevels</span> = <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span>min, max<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> array = <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">map</span>.<span style="color: #006600;">getMapTypes</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> || <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>;<br />
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i=<span style="color: #CC0000;">0</span>; i<br />
array<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">getMinimumResolution</span> = <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> min <span style="color: #66cc66;">&#125;</span>;<br />
array<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">getMaximumResolution</span> = <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> max <span style="color: #66cc66;">&#125;</span>;<br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p></p>
<p><a href="http://seamcity.madeinxpain.com/examples/gmap/restrict.html" >Y aquí tenemos un ejemplo de la clase en acción</a></p>
]]></content:encoded>
			<wfw:commentRss>http://seamcity.madeinxpain.com/archives/como-limitar-el-zoom-y-el-desplazamiento-en-google-maps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eclipse tips</title>
		<link>http://seamcity.madeinxpain.com/archives/eclipse-tips</link>
		<comments>http://seamcity.madeinxpain.com/archives/eclipse-tips#comments</comments>
		<pubDate>Sat, 02 Feb 2008 09:47:54 +0000</pubDate>
		<dc:creator>Tes</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://seamcity.madeinxpain.com/archives/27</guid>
		<description><![CDATA[Para aquellos que, como yo, utilizáis eclipse (o cualquiera de sus variantes) como IDE de desarrollo, aquí os dejo una serie de truquillos, explicaciones y atajos de teclado interesantes. Seguro que ya conocéis la mayoría, pero allá van.

Toggle Comment: (ctrl+shift+C) Comenta/Descomenta la linea actual o lineas seleccionadas.
Generate Element Comment: (shift+alt+J) Genera las lineas de comentario [...]]]></description>
			<content:encoded><![CDATA[<p>Para aquellos que, como yo, utilizáis eclipse (o cualquiera de sus variantes) como IDE de desarrollo, aquí os dejo una serie de truquillos, explicaciones y atajos de teclado interesantes. Seguro que ya conocéis la mayoría, pero allá van.</p>
<ul>
<li><strong>Toggle Comment</strong>: (ctrl+shift+C) Comenta/Descomenta la linea actual o lineas seleccionadas.</li>
<li><strong>Generate Element Comment</strong>: (shift+alt+J) Genera las lineas de comentario del elemento sobre el que está el cursor.</li>
<li><strong>Organize Imports</strong>: (ctrl+shift+O) Importa las clases que necesitas y elimina las que no.<br />
Es aplicable a una clase, paquete o a todo el proyecto.</li>
<li><strong>Correct Indentation</strong>: (ctrl+I) corrige la identación (tabulación de lineas) de la linea actual o lineas seleccionadas.</li>
<li><strong>Format</strong>: (ctrl+shift+F) Esto te deja el código bonito. Deja los espacios correspondientes, saltos de línea, identación... según las convenciones de java.<br />
Pero lo mejor, es que puedes definir todas esas cosas a tu gusto. Ve al menu de Windows-&gt;Preferences-&gt;Java-&gt;Code Style-&gt;Formatter. Seleccionando "Edit" accedes a un menu donde puedes cambiar el aspecto del código sobre los comentarios, saltos de linea, sentencias de control, declaración de variables...<br />
Es aplicable a una clase, paquete o a todo el proyecto.</li>
<li><strong>Clean Up</strong>: Esta herramienta es realmente poderosa. Es parecida a "Format". Permite eliminar/añadir el modificador this, paréntesis, llaves, anotaciones automáticas y otras cosillas.<br />
Es aplicable a una clase, paquete o a todo el proyecto.</li>
<li><strong>Generate Getters/Setters</strong>: Genera métodos get/set estilo JavaBean para los campos que queramos.</li>
<li><strong>Generate Constructor using Fields</strong>: Genera el constructor de la clase con los campos definidos, en plan JavaBean.</li>
<li><strong>Surround With</strong>: (shift+alt+Z) Mete las lineas seleccionadas en un bloque if, while, try-catch, etc.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://seamcity.madeinxpain.com/archives/eclipse-tips/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo limitar el numero de caracteres que muestra un h:outputText</title>
		<link>http://seamcity.madeinxpain.com/archives/como-limitar-el-numero-de-caracteres-que-muestra-un-houtputtext</link>
		<comments>http://seamcity.madeinxpain.com/archives/como-limitar-el-numero-de-caracteres-que-muestra-un-houtputtext#comments</comments>
		<pubDate>Fri, 01 Feb 2008 12:39:11 +0000</pubDate>
		<dc:creator>Tes</dc:creator>
				<category><![CDATA[jsf]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://seamcity.madeinxpain.com/archives/24</guid>
		<description><![CDATA[En alguna ocasión, trabajando con JSF, he necesitado limitar el número de caracteres que se muestran en un elemento de salida de texto, como un outuputText.Una forma fácil de hacerlo es implementar un Converter personalizado.
En primer lugar necesitas declarar una clase que implemente la interfaz javax.faces.convert.Converter e implementar los métodos getAsObject y getAsString.
Aquí tienes la [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">En alguna ocasión, trabajando con JSF, he necesitado limitar el número de caracteres que se muestran en un elemento de salida de texto, como un outuputText.Una forma fácil de hacerlo es implementar un Converter personalizado.</p>
<p align="justify">En primer lugar necesitas declarar una clase que implemente la interfaz javax.faces.convert.Converter e implementar los métodos <em>getAsObject</em> y <em>getAsString</em>.<br />
Aquí tienes la implementación del Converter:  <a href="http://seamcity.madeinxpain.com/wp-content/uploads/2008/02/stringlimiterconverter.java"  title="StringLimiterConverter">StringLimiterConverter</a></p>
<div class="syntax_hilite">
<div id="java-8">
<div class="java">package es.<span style="color: #006600;">neodoo</span>.<span style="color: #006600;">control</span>.<span style="color: #006600;">jsf</span>;</p>
<p><span style="color: #a1a100;">import javax.faces.component.UIComponent;</span><br />
<span style="color: #a1a100;">import javax.faces.context.FacesContext;</span><br />
<span style="color: #a1a100;">import javax.faces.convert.Converter;</span></p>
<p><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> StringLimiterConverter <span style="color: #000000; font-weight: bold;">implements</span> Converter <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #993333;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a> LIMIT_PARAMETER_NAME = <span style="color: #ff0000;">"limit"</span>;<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #993333;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #993333;">int</span> DEFAULT_LIMIT = <span style="color: #cc66cc;">5</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> getAsObject<span style="color: #66cc66;">&#40;</span>FacesContext context, UIComponent component, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a> value<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> limit<span style="color: #66cc66;">&#40;</span>value, getLimitAttribute<span style="color: #66cc66;">&#40;</span>component<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a> getAsString<span style="color: #66cc66;">&#40;</span>FacesContext context, UIComponent component, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> value<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>! <span style="color: #66cc66;">&#40;</span>value <span style="color: #000000; font-weight: bold;">instanceof</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">null</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> limit<span style="color: #66cc66;">&#40;</span>value.<span style="color: #006600;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, getLimitAttribute<span style="color: #66cc66;">&#40;</span>component<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #993333;">int</span> getLimitAttribute<span style="color: #66cc66;">&#40;</span>UIComponent component<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> att = component.<span style="color: #006600;">getAttributes</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span>LIMIT_PARAMETER_NAME<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>att == <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> DEFAULT_LIMIT;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Integer</span></a>.<span style="color: #006600;">parseInt</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a><span style="color: #66cc66;">&#41;</span>component.<span style="color: #006600;">getAttributes</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">get</span><span style="color: #66cc66;">&#40;</span>LIMIT_PARAMETER_NAME<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a> limit<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a> s, <span style="color: #993333;">int</span> limit<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">String</span></a> limited = s;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>! <span style="color: #66cc66;">&#40;</span>s.<span style="color: #006600;">length</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> &amp;lt;= limit<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; limited = s.<span style="color: #006600;">substring</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>, limit<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> limited;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p>
</p>
<p align="justify">Después registra el converter en el archivo <em>faces-config.xml</em></p>
<div class="syntax_hilite">
<div id="xml-9">
<div class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;faces</span> -config<span style="font-weight: bold; color: black;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;converter<span style="font-weight: bold; color: black;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/converter<span style="font-weight: bold; color: black;">&gt;</span></span></span><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;converter</span> -id<span style="font-weight: bold; color: black;">&gt;</span></span>stringLimiterConverter<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/converter<span style="font-weight: bold; color: black;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;converter</span> -class<span style="font-weight: bold; color: black;">&gt;</span></span>tes.jsf.converter.StringLimiterConverter<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/converter<span style="font-weight: bold; color: black;">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/faces<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</div>
</div>
<p>
</p>
<p align="justify">Y ya puedes usarlo a través de la etiqueta de JSF <em><f :converter></f></em></p>
<div class="syntax_hilite">
<div id="xml-10">
<div class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;h</span> <img src='http://seamcity.madeinxpain.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> utputText <span style="color: #000066;">value</span>=<span style="color: #ff0000;">"En un lugar de la Mancha..."</span><span style="font-weight: bold; color: black;">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;f</span> :converter <span style="color: #000066;">converterId</span>=<span style="color: #ff0000;">"stringLimiterConverter"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;f</span> :attribute <span style="color: #000066;">name</span>=<span style="color: #ff0000;">"limit"</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">"6"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/h<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</div>
</div>
<p>
</p>
<p>Con el atributo <em>&lt;f:attribute name="limit" value="6" /&gt;</em> podemos indicarle el número de caracteres que queremos que nos muestre</p>
]]></content:encoded>
			<wfw:commentRss>http://seamcity.madeinxpain.com/archives/como-limitar-el-numero-de-caracteres-que-muestra-un-houtputtext/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo iterar sobre un Set en un dataTable</title>
		<link>http://seamcity.madeinxpain.com/archives/como-iterar-sobre-un-set-en-un-datatable</link>
		<comments>http://seamcity.madeinxpain.com/archives/como-iterar-sobre-un-set-en-un-datatable#comments</comments>
		<pubDate>Fri, 01 Feb 2008 12:06:43 +0000</pubDate>
		<dc:creator>Tes</dc:creator>
				<category><![CDATA[jsf]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://seamcity.madeinxpain.com/archives/22</guid>
		<description><![CDATA[El otro día iba a crear un h:dataTable con los valores almacenados en un java.util.Set, y me llevé una sopresa al comprobar que no se podía.
La razón es que el componente UIData (que es vital para el funcionamiento de las etiquetas h:dataTable y ui:repeat entre otras ) está basado en índices numéricos, al igual que [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">El otro día iba a crear un h:dataTable con los valores almacenados en un java.util.Set, y me llevé una sopresa al comprobar que no se podía.</p>
<p align="justify">La razón es que el componente UIData (que es vital para el funcionamiento de las etiquetas h:dataTable y ui:repeat entre otras ) está basado en índices numéricos, al igual que la interfaz java.util.List.<br />
La interfaz java.util.Set está basada en parejas de elementos clave/valor, por lo que no se lleva bien con el componente UIData.</p>
<p align="justify">Una solución para poder usar nuestro Set con dataTables es convertirlo previamenta a un List.<br />
Para ello podemos usar un ELResolver. Ya expliqué cómo hacerlo en otro  <a href="http://seamcity.madeinxpain.com/archives/como-implementar-un-elresolver-personalizado" > post</a></p>
]]></content:encoded>
			<wfw:commentRss>http://seamcity.madeinxpain.com/archives/como-iterar-sobre-un-set-en-un-datatable/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo implementar un ELResolver personalizado</title>
		<link>http://seamcity.madeinxpain.com/archives/como-implementar-un-elresolver-personalizado</link>
		<comments>http://seamcity.madeinxpain.com/archives/como-implementar-un-elresolver-personalizado#comments</comments>
		<pubDate>Fri, 01 Feb 2008 11:58:33 +0000</pubDate>
		<dc:creator>Tes</dc:creator>
				<category><![CDATA[jsf]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://seamcity.madeinxpain.com/archives/21</guid>
		<description><![CDATA[   	El Expression Language de JSF nos permite acceder a propiedades de los objetos siempre que estas esten disponibles mediante getters.
Esto está muy bien, pero en ocasiones lo que queremos obtener es un objeto que solo está accesible a través de un método que no es un getter, como por ejemplo el tamaño [...]]]></description>
			<content:encoded><![CDATA[<p>   	El Expression Language de JSF nos permite acceder a propiedades de los objetos siempre que estas esten disponibles mediante getters.</p>
<p>Esto está muy bien, pero en ocasiones lo que queremos obtener es un objeto que solo está accesible a través de un método que no es un getter, como por ejemplo el tamaño de una java.util.Collection disponible a través de su método collection.size(), o los valores de un java.util.Map disponibles a través del método values().</p>
<p>Para ello podemos realizar nuestra propia implementación de la clase javax.el.ELResolver.<br />
Esta clase es la encargada de evaluar las ELs (las expresiones que van entre #{}) y realizar las acciones correspondientes.<br />
Sustiye a los antiguos PropertyResolver y VariableResolver, que están marcados como obsoletos (deprecated) en la especificación 1.2 de JSF (que es la usada en la versión 5 de Java EE).</p>
<p>Para usar nuestro propio ELResolver solo deboemos seguir tres sencillos pasos:</p>
<ul>
<li><strong>1) Implementar nuestra clase que extienda de javax.el.ELResolver </strong><br />
Puedes descargarla aquí: <a href="http://seamcity.madeinxpain.com/wp-content/uploads/2008/02/myelresolver.java"  title="MyELResolver">MyELResolver</a><br />
Necesitarás añadir al classpath de compilación el archivo el-api.jar</li>
<div class="syntax_hilite">
<div id="java-12">
<div class="java">package tes.<span style="color: #006600;">jsf</span>;</p>
<p><span style="color: #a1a100;">import java.util.ArrayList;</span><br />
<span style="color: #a1a100;">import java.util.Collection;</span><br />
<span style="color: #a1a100;">import java.util.HashMap;</span><br />
<span style="color: #a1a100;">import java.util.Iterator;</span><br />
<span style="color: #a1a100;">import java.util.Map;</span></p>
<p><span style="color: #a1a100;">import javax.el.ELContext;</span></p>
<p><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MyELResolver <span style="color: #000000; font-weight: bold;">extends</span> javax.<span style="color: #006600;">el</span>.<span style="color: #006600;">ELResolver</span> <span style="color: #66cc66;">&#123;</span></p>
<p>&nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">Class</span> getCommonPropertyType<span style="color: #66cc66;">&#40;</span>ELContext context, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> base<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">null</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?q=allinurl%3AIterator+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Iterator</span></a> getFeatureDescriptors<span style="color: #66cc66;">&#40;</span>ELContext context, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> base<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">null</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">Class</span> getType<span style="color: #66cc66;">&#40;</span>ELContext context, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> base, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> property<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">null</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> getValue<span style="color: #66cc66;">&#40;</span>ELContext context, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> base, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> property<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>base <span style="color: #000000; font-weight: bold;">instanceof</span> <a href="http://www.google.com/search?q=allinurl%3ACollection+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Collection</span></a><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> resolveInCollection<span style="color: #66cc66;">&#40;</span>context, <span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3ACollection+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Collection</span></a><span style="color: #66cc66;">&#41;</span>base, property<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>base <span style="color: #000000; font-weight: bold;">instanceof</span> <a href="http://www.google.com/search?q=allinurl%3AMap+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Map</span></a><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> resolveInMap<span style="color: #66cc66;">&#40;</span>context, <span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AMap+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Map</span></a><span style="color: #66cc66;">&#41;</span>base, property<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">null</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">boolean</span> isReadOnly<span style="color: #66cc66;">&#40;</span>ELContext arg0, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> arg1, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> arg2<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">true</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #993333;">void</span> setValue<span style="color: #66cc66;">&#40;</span>ELContext arg0, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> arg1, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> arg2, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> arg3<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> resolveInCollection<span style="color: #66cc66;">&#40;</span>ELContext context, <a href="http://www.google.com/search?q=allinurl%3ACollection+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Collection</span></a> base, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> property<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>property.<span style="color: #006600;">equals</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"size"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #006600;">setPropertyResolved</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> base.<span style="color: #006600;">size</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>property.<span style="color: #006600;">equals</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"toMap"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #006600;">setPropertyResolved</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> collectionToMap<span style="color: #66cc66;">&#40;</span>base<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>property.<span style="color: #006600;">equals</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"toList"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #006600;">setPropertyResolved</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3AArrayList+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">ArrayList</span></a><span style="color: #66cc66;">&#40;</span>base<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">null</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> resolveInMap<span style="color: #66cc66;">&#40;</span>ELContext context, <a href="http://www.google.com/search?q=allinurl%3AMap+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Map</span></a> base, <a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> property<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>property.<span style="color: #006600;">equals</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"size"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #006600;">setPropertyResolved</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> base.<span style="color: #006600;">size</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>property.<span style="color: #006600;">equals</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"values"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #006600;">setPropertyResolved</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> base.<span style="color: #006600;">values</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>property.<span style="color: #006600;">equals</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"keySet"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #006600;">setPropertyResolved</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> base.<span style="color: #006600;">keySet</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>property.<span style="color: #006600;">equals</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"entrySet"</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; context.<span style="color: #006600;">setPropertyResolved</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> base.<span style="color: #006600;">entrySet</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">null</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> Map&lt;object&gt; collectionToMap<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3ACollection+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Collection</span></a> col<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Map&lt;/object&gt;&lt;object&gt; map = <span style="color: #000000; font-weight: bold;">new</span> HashMap&lt;/object&gt;&lt;object&gt;<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AObject+java.sun.com&amp;bntl=1" onclick="javascript:pageTracker._trackPageview('article_out/www.google.com');"><span style="color: #aaaadd; font-weight: bold;">Object</span></a> obj : col<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; map.<span style="color: #006600;">put</span><span style="color: #66cc66;">&#40;</span>obj, obj<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> map;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div>
</div>
</div>
<p>
</object></ul>
<ul>
<li><strong>2) Declarar el ELResolver en el archivo faces-config.xml </strong><br />
La declaración debe hacerse dentro de la seccion <em>&lt;application</em>&gt;.<br />
<em>&lt;el-resolver&gt;tes.jsf.MyELResolver&lt;/el-resolver&gt;</em></li>
</ul>
<ul>
<li><strong>3) Usar las nuevas posibilidades del Language Expression </strong>
<ul>
<li>El tamaño de mi Collection es: <em>#{myCollection.size} </em></li>
<li>Puedes usarlo para rellenar tus combos:</li>
<pre>     &lt;h:selectOneMenu&gt;
          &lt;f:selectItems value="#{myCollection.toMap}" /&gt;
     &lt;h:selectOneMenu&gt;</pre>
<li>Para asociar tu java.util.Set con un dataTable
<pre>     &lt;h:dataTable value="#{mySet.toList}" var="entry"&gt;
          ...
     &lt;/h:dataTable&gt;</pre>
</li>
<li>Para iterar sobre las entradas de un Map</li>
<pre>     &lt;ui:repeat value="#{myMap.entrySet.toList}" var="entry"&gt;
          #{entry.key} : #{entry.value} &lt;br /&gt;
     &lt;/ui:repeat&gt;</pre>
<li>Y para todo lo que se te ocurra añadir</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://seamcity.madeinxpain.com/archives/como-implementar-un-elresolver-personalizado/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Adjuntar el código fuente o javadoc a un .jar en eclipse</title>
		<link>http://seamcity.madeinxpain.com/archives/adjuntar-el-codigo-fuente-o-javadoc-a-un-jar-en-eclipse</link>
		<comments>http://seamcity.madeinxpain.com/archives/adjuntar-el-codigo-fuente-o-javadoc-a-un-jar-en-eclipse#comments</comments>
		<pubDate>Tue, 11 Dec 2007 14:54:24 +0000</pubDate>
		<dc:creator>Tes</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://seamcity.madeinxpain.com/archives/5</guid>
		<description><![CDATA[En numerosas ocasiones viene bien tener a mano el javadoc de una libería o su código fuente.
¿Cómo evitar que nos salga  el Class File Editor con el mensaje "source not found" o "no javadoc could be found"?
Simple. Solo tienes que especificar la ruta hasta el código fuente o el javadoc.
Entra a la configuración del [...]]]></description>
			<content:encoded><![CDATA[<p>En numerosas ocasiones viene bien tener a mano el javadoc de una libería o su código fuente.</p>
<p>¿Cómo evitar que nos salga  el Class File Editor con el mensaje "source not found" o "no javadoc could be found"?</p>
<p>Simple. Solo tienes que especificar la ruta hasta el código fuente o el javadoc.</p>
<p>Entra a la configuración del "build path" del proyecto, a la pestaña de las librerías.<br />
Project -&gt; Properties -&gt; Java Build Path -&gt; Pestaña Libraries</p>
<p>Allí te saldrá un listado de todos los .jar que se encuentran en el classpath de tu proyecto.<br />
Cada uno de esos jars lleva asociados cuatro elementos, que se pueden ver y editar usando la flecha situada a la izquierda del icono del jar:<br />
- <strong>Source:</strong> Permite adjuntar el código fuente de las clases contenidas en el jar. Este código puede encontrarse en otro jar o en una carpeta del sistema de archivos.<br />
- <strong>Javadoc:</strong> Permite adjuntar el javadoc de las clases contenidas en el jar. La ruta al javadoc puede ser una url de internet o una ruta del sistema de archivos local, directorio o fichero.<br />
- <strong>Native libraries:</strong> Permite especificar librerías nativas del sistema operativo.<br />
- <strong>Access rules:</strong> Permite restringir el acceso las clases contenidas en el jar.</p>
]]></content:encoded>
			<wfw:commentRss>http://seamcity.madeinxpain.com/archives/adjuntar-el-codigo-fuente-o-javadoc-a-un-jar-en-eclipse/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

