<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Parivero</id>
		<title>Dos Ideas. - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://dosideas.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Parivero"/>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/Especial:Contribuciones/Parivero"/>
		<updated>2026-04-27T19:54:07Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Custom_Fields_en_Liferay&amp;diff=6938</id>
		<title>Custom Fields en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Custom_Fields_en_Liferay&amp;diff=6938"/>
				<updated>2014-04-15T18:15:51Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Obteniendo un custom field de sitio desde un template */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta utilidad permite definir variables propias dentro de determinados recursos, por ejemplo sitio, pagina, usuario, etc. Estas variables se exponen mediante [http://www.liferay.com/es/community/wiki/-/wiki/Main/Developing+with+Expando  Liferay’s ExpandoService].&lt;br /&gt;
&lt;br /&gt;
=== Web Content ===&lt;br /&gt;
En este ejemplo se muestra como acceder, mediante [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/velocity-engine Velocity], al Custom Field --fecha-- definido dentro del recurso Web Content.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## Servicio para buscar los artículos publicados.&lt;br /&gt;
#set ($journalArticleLocalService = $serviceLocator.findService('com.liferay.portlet.journal.service.JournalArticleLocalService'))&lt;br /&gt;
&lt;br /&gt;
## GroupId.&lt;br /&gt;
#set($groupId = $getterUtil.getLong($request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;scope-group-id&amp;quot;)))&lt;br /&gt;
&lt;br /&gt;
## Retorna el articulo actual.&lt;br /&gt;
#set ($currentArticle = $journalArticleLocalService.getArticle($getterUtil.getLong($groupId), $reserved-article-id.data, $getterUtil.getDouble($reserved-article-version.data)))&lt;br /&gt;
&lt;br /&gt;
## companyId.&lt;br /&gt;
#set ($companyId = $getterUtil.getLong($request.theme-display.company-id))&lt;br /&gt;
&lt;br /&gt;
## ExpandoService, retorna el valor del custom field --fecha-- del --currentArticle--.&lt;br /&gt;
#set($fecha = $expandoValueLocalService.getData($companyId, &amp;quot;com.liferay.portlet.journal.model.JournalArticle&amp;quot;, &amp;quot;CUSTOM_FIELDS&amp;quot;, &amp;quot;fecha&amp;quot;, $currentArticle.id))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Texto: $text.data -- Fecha: $fecha&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Obteniendo un custom field de sitio desde un WebContent===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## GroupId.&lt;br /&gt;
#set($groupId = $getterUtil.getLong($request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;scope-group-id&amp;quot;)))&lt;br /&gt;
 &lt;br /&gt;
## companyId.&lt;br /&gt;
#set ($companyId = $getterUtil.getLong($request.theme-display.company-id))&lt;br /&gt;
 &lt;br /&gt;
## ExpandoService, retorna el valor del custom field --EsIntranet-- del --sitio--.&lt;br /&gt;
#set($esIntranet = $expandoValueLocalService.getData($companyId, &amp;quot;com.liferay.portal.model.Group&amp;quot;, &amp;quot;CUSTOM_FIELDS&amp;quot;, &amp;quot;EsIntranet&amp;quot;,$groupId))&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Es Intranet: $esIntranet&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
[http://www.liferay.com/es/community/wiki/-/wiki/Main/Custom+fields Wiki oficial de Liferay]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Liferay Custom_Fields]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Custom_Fields_en_Liferay&amp;diff=6937</id>
		<title>Custom Fields en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Custom_Fields_en_Liferay&amp;diff=6937"/>
				<updated>2014-04-15T18:15:15Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Web Content */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta utilidad permite definir variables propias dentro de determinados recursos, por ejemplo sitio, pagina, usuario, etc. Estas variables se exponen mediante [http://www.liferay.com/es/community/wiki/-/wiki/Main/Developing+with+Expando  Liferay’s ExpandoService].&lt;br /&gt;
&lt;br /&gt;
=== Web Content ===&lt;br /&gt;
En este ejemplo se muestra como acceder, mediante [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/velocity-engine Velocity], al Custom Field --fecha-- definido dentro del recurso Web Content.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## Servicio para buscar los artículos publicados.&lt;br /&gt;
#set ($journalArticleLocalService = $serviceLocator.findService('com.liferay.portlet.journal.service.JournalArticleLocalService'))&lt;br /&gt;
&lt;br /&gt;
## GroupId.&lt;br /&gt;
#set($groupId = $getterUtil.getLong($request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;scope-group-id&amp;quot;)))&lt;br /&gt;
&lt;br /&gt;
## Retorna el articulo actual.&lt;br /&gt;
#set ($currentArticle = $journalArticleLocalService.getArticle($getterUtil.getLong($groupId), $reserved-article-id.data, $getterUtil.getDouble($reserved-article-version.data)))&lt;br /&gt;
&lt;br /&gt;
## companyId.&lt;br /&gt;
#set ($companyId = $getterUtil.getLong($request.theme-display.company-id))&lt;br /&gt;
&lt;br /&gt;
## ExpandoService, retorna el valor del custom field --fecha-- del --currentArticle--.&lt;br /&gt;
#set($fecha = $expandoValueLocalService.getData($companyId, &amp;quot;com.liferay.portlet.journal.model.JournalArticle&amp;quot;, &amp;quot;CUSTOM_FIELDS&amp;quot;, &amp;quot;fecha&amp;quot;, $currentArticle.id))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Texto: $text.data -- Fecha: $fecha&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Obteniendo un custom field de sitio desde un template ===&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## GroupId.&lt;br /&gt;
#set($groupId = $getterUtil.getLong($request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;scope-group-id&amp;quot;)))&lt;br /&gt;
 &lt;br /&gt;
## companyId.&lt;br /&gt;
#set ($companyId = $getterUtil.getLong($request.theme-display.company-id))&lt;br /&gt;
 &lt;br /&gt;
## ExpandoService, retorna el valor del custom field --EsIntranet-- del --sitio--.&lt;br /&gt;
#set($esIntranet = $expandoValueLocalService.getData($companyId, &amp;quot;com.liferay.portal.model.Group&amp;quot;, &amp;quot;CUSTOM_FIELDS&amp;quot;, &amp;quot;EsIntranet&amp;quot;,$groupId))&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Es Intranet: $esIntranet&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
[http://www.liferay.com/es/community/wiki/-/wiki/Main/Custom+fields Wiki oficial de Liferay]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Liferay Custom_Fields]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6921</id>
		<title>Visualización dinámica de web content en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6921"/>
				<updated>2013-09-26T17:41:26Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este ejemplo se muestra como visualizar de forma dinámica, un Web Content especifico mediante su id. &lt;br /&gt;
&lt;br /&gt;
En el código del template vemos como obtener un parámetro de la url actual (el id del Web Content) y como buscar el contenido para visualizar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#set ($current_url = $request.get(&amp;quot;attributes&amp;quot;).CURRENT_COMPLETE_URL)&lt;br /&gt;
#set ($paramName='webContentId')&lt;br /&gt;
#set ($webContentId = $httpUtil.getParameter($current_url, $paramName))&lt;br /&gt;
#set ($group_id = $getterUtil.getLong($request.theme-display.scope-group-id))&lt;br /&gt;
#set ($webcontent-id = $webContentId)&lt;br /&gt;
#set ($webcontent=$journalContentUtil.getContent($group_id, $webcontent-id, &amp;quot;&amp;quot;, &amp;quot;$locale&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
    &lt;br /&gt;
#if($webcontent)&lt;br /&gt;
    $webcontent&lt;br /&gt;
#else&lt;br /&gt;
    &amp;lt;a href=&amp;quot;?webContentId=WHO-IS-USING-LIFERAY&amp;quot;&amp;gt;WHO-IS-USING-LIFERAY&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;a href=&amp;quot;/web/guest/prueba&amp;quot;&amp;gt;Ir al link&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asignar un id propio a un Web Content hay que agregar la siguiente propiedad al archivo portal-ext.properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
journal.article.force.autogenerate.id=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto habilitara en la creación del Web Content la posibilidad de cargar un id propio o la opción de tildar que Liferay lo autogenere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Liferay Web Content]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6920</id>
		<title>Visualización dinámica de web content en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6920"/>
				<updated>2013-09-26T17:40:04Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este ejemplo se muestra como visualizar de forma dinámica, un Web Content especifico mediante su id. &lt;br /&gt;
&lt;br /&gt;
En el código del template se muestra como obtener un parámetro de la url actual (el id del Web Content) y como buscar el contenido para visualizar mediante este id.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#set ($current_url = $request.get(&amp;quot;attributes&amp;quot;).CURRENT_COMPLETE_URL)&lt;br /&gt;
#set ($paramName='webContentId')&lt;br /&gt;
#set ($webContentId = $httpUtil.getParameter($current_url, $paramName))&lt;br /&gt;
#set ($group_id = $getterUtil.getLong($request.theme-display.scope-group-id))&lt;br /&gt;
#set ($webcontent-id = $webContentId)&lt;br /&gt;
#set ($webcontent=$journalContentUtil.getContent($group_id, $webcontent-id, &amp;quot;&amp;quot;, &amp;quot;$locale&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
    &lt;br /&gt;
#if($webcontent)&lt;br /&gt;
    $webcontent&lt;br /&gt;
#else&lt;br /&gt;
    &amp;lt;a href=&amp;quot;?webContentId=WHO-IS-USING-LIFERAY&amp;quot;&amp;gt;WHO-IS-USING-LIFERAY&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;a href=&amp;quot;/web/guest/prueba&amp;quot;&amp;gt;Ir al link&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asignar un id propio a un Web Content hay que agregar la siguiente propiedad al archivo portal-ext.properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
journal.article.force.autogenerate.id=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto habilitara en la creación del Web Content la posibilidad de cargar un id propio o la opción de tildar que Liferay lo autogenere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Liferay Web Content]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6919</id>
		<title>Visualización dinámica de web content en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6919"/>
				<updated>2013-09-26T17:32:18Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este ejemplo se muestra como visualizar de forma dinámica, mediante un parámetro en la url, distintos Web Content en un mismo portlet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#set ($current_url = $request.get(&amp;quot;attributes&amp;quot;).CURRENT_COMPLETE_URL)&lt;br /&gt;
#set ($paramName='webContentId')&lt;br /&gt;
#set ($webContentId = $httpUtil.getParameter($current_url, $paramName))&lt;br /&gt;
#set ($group_id = $getterUtil.getLong($request.theme-display.scope-group-id))&lt;br /&gt;
#set ($webcontent-id = $webContentId)&lt;br /&gt;
#set ($webcontent=$journalContentUtil.getContent($group_id, $webcontent-id, &amp;quot;&amp;quot;, &amp;quot;$locale&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
    &lt;br /&gt;
#if($webcontent)&lt;br /&gt;
    $webcontent&lt;br /&gt;
#else&lt;br /&gt;
    &amp;lt;a href=&amp;quot;?articleId=WHO-IS-USING-LIFERAY&amp;quot;&amp;gt;WHO-IS-USING-LIFERAY&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;a href=&amp;quot;/web/guest/prueba&amp;quot;&amp;gt;Ir al link&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asignar un id propio a un Web Content hay que agregar las siguiente propiedad al archivo portal-ext.properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
journal.article.force.autogenerate.id=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto habilitara en la creación del Web Content la posibilidad de cargar un id propio o la opción de tildar que Liferay lo autogenere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Liferay Web Content]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6918</id>
		<title>Visualización dinámica de web content en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6918"/>
				<updated>2013-09-26T17:20:11Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este ejemplo se muestra como visualizar de forma dinámica, mediante un parámetro en la url, distintos Web Content en un mismo portlet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#set ($current_url = $request.get(&amp;quot;attributes&amp;quot;).CURRENT_COMPLETE_URL)&lt;br /&gt;
#set ($paramName='webContentId')&lt;br /&gt;
#set ($webContentId = $httpUtil.getParameter($current_url, $paramName))&lt;br /&gt;
#set ($group_id = $getterUtil.getLong($request.theme-display.scope-group-id))&lt;br /&gt;
#set ($webcontent-id = $webContentId)&lt;br /&gt;
#set ($webcontent=$journalContentUtil.getContent($group_id, $webcontent-id, &amp;quot;&amp;quot;, &amp;quot;$locale&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
    &lt;br /&gt;
#if($webcontent)&lt;br /&gt;
    $webcontent&lt;br /&gt;
#else&lt;br /&gt;
    &amp;lt;a href=&amp;quot;?articleId=WHO-IS-USING-LIFERAY&amp;quot;&amp;gt;WHO-IS-USING-LIFERAY&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;a href=&amp;quot;/web/guest/prueba&amp;quot;&amp;gt;Ir al link&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asignar un id propio a un Web Content hay que agregar las siguiente propiedad al archivo portal-ext.properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
journal.article.force.autogenerate.id=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto habilitara en la creación del Web Content la posibilidad de cargar un id propio o la opción de tildar que Liferay lo autogenere.&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6917</id>
		<title>Visualización dinámica de web content en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6917"/>
				<updated>2013-09-26T17:18:52Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este ejemplo se muestra como visualizar de forma dinámica, mediante un parámetro en la url, distintos Web Content en un mismo portlet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#set ($current_url = $request.get(&amp;quot;attributes&amp;quot;).CURRENT_COMPLETE_URL)&lt;br /&gt;
#set ($paramName='webContentId')&lt;br /&gt;
#set ($webContentId = $httpUtil.getParameter($current_url, $paramName))&lt;br /&gt;
#set ($group_id = $getterUtil.getLong($request.theme-display.scope-group-id))&lt;br /&gt;
#set ($webcontent-id = $webContentId)&lt;br /&gt;
#set ($webcontent=$journalContentUtil.getContent($group_id, $webcontent-id, &amp;quot;&amp;quot;, &amp;quot;$locale&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
    &lt;br /&gt;
#if($webcontent)&lt;br /&gt;
    $webcontent&lt;br /&gt;
#else&lt;br /&gt;
    &amp;lt;a href=&amp;quot;?articleId=WHO-IS-USING-LIFERAY&amp;quot;&amp;gt;WHO-IS-USING-LIFERAY&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;a href=&amp;quot;/web/guest/prueba&amp;quot;&amp;gt;Ir al link&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para asignar un id propio a un Web Content hay que agregar las siguiente propiedad al archivo portal-ext.properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
journal.article.force.autogenerate.id=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto habilitara la cargar un id propio o tildar la opción de que Liferay lo autogenere.&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6916</id>
		<title>Visualización dinámica de web content en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Visualizaci%C3%B3n_din%C3%A1mica_de_web_content_en_Liferay&amp;diff=6916"/>
				<updated>2013-09-26T16:07:12Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: Página creada con 'En este ejemplo se muestra como visualizar de forma dinámica, mediante un parámetro en la url, distintos Web Content en un mismo portlet.  &amp;lt;code&amp;gt; #set ($current_url = $request…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este ejemplo se muestra como visualizar de forma dinámica, mediante un parámetro en la url, distintos Web Content en un mismo portlet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#set ($current_url = $request.get(&amp;quot;attributes&amp;quot;).CURRENT_COMPLETE_URL)&lt;br /&gt;
#set ($paramName='webContentId')&lt;br /&gt;
#set ($webContentId = $httpUtil.getParameter($current_url, $paramName))&lt;br /&gt;
#set ($group_id = $getterUtil.getLong($request.theme-display.scope-group-id))&lt;br /&gt;
#set ($webcontent-id = $webContentId)&lt;br /&gt;
#set ($webcontent=$journalContentUtil.getContent($group_id, $webcontent-id, &amp;quot;&amp;quot;, &amp;quot;$locale&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
    &lt;br /&gt;
#if($webcontent)&lt;br /&gt;
    $webcontent&lt;br /&gt;
#else&lt;br /&gt;
    &amp;lt;a href=&amp;quot;?articleId=WHO-IS-USING-LIFERAY&amp;quot;&amp;gt;WHO-IS-USING-LIFERAY&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;br&amp;gt;&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;a href=&amp;quot;/web/guest/prueba&amp;quot;&amp;gt;Ir al link&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Utilizandon uno de los Web Content default que viene en Liferay &amp;quot;WHO-IS-USING-LIFERAY&amp;quot;. Adicionalmente para poder asignar un id propio a un Web Content hay que agregar las siguiente propiedad al archivo portal-ext.properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
journal.article.force.autogenerate.id=false&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6915</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6915"/>
				<updated>2013-09-26T14:26:35Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Internacionalización ==&lt;br /&gt;
Liferay provee la internacionalización de un set amplio de idiomas, en el caso de que no se encuentre el idioma ó el dialecto especifico que necesitas, con los siguientes pasos lo podes agregar.&lt;br /&gt;
&lt;br /&gt;
En este caso vamos a gregar el dialecto de Argentina &amp;lt;b&amp;gt;es_AR&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Agregar el archivo &amp;quot;Language_es_AR.properties&amp;quot; en el directorio LIFERAY_PORTAL/WEB-INF/src/content&lt;br /&gt;
&lt;br /&gt;
Agregar la propiedad &amp;quot;locales&amp;quot; al archivo portal-ext.properties, ubicado en el directorio LIFERAY_PORTAL/WEB_INF/classes, en el caso de que no exista el archivo crearlo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
locales=ar_SA,eu_ES,bg_BG,ca_AD,ca_ES,zh_CN,zh_TW,hr_HR,cs_CZ,nl_NL,nl_BE,en_US,en_GB,et_EE,fi_FI,fr_FR,gl_ES,de_DE,el_GR,iw_IL,hi_IN,hu_HU,in_ID,it_IT,ja_JP,ko_KR,nb_NO,fa_IR,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,sr_RS,sr_RS_latin,sl_SI,sk_SK,es_ES,sv_SE,tr_TR,uk_UA,vi_VN,es_AR&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agregar en el archivo web.xml ubicado en LIFERAY_PORTAL/WEB_INF/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;
    &amp;lt;servlet-name&amp;gt;I18n Servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
    &amp;lt;url-pattern&amp;gt;/es_AR/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por último agregar el archivo Language_es_AR.properties en el directorio LIFERAY_PORTAL/WEB_INF/src/content y reiniciar el portal.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
* [[Ejecuciones automaticas en Liferay]]&lt;br /&gt;
* [[Maven en Liferay]]&lt;br /&gt;
* [[Hooks en Liferay]]&lt;br /&gt;
* [[Internacionalizar un texto dentro de un theme en Liferay]]&lt;br /&gt;
* [[Hacer un layout responsive con bootstrap en Liferay]]&lt;br /&gt;
* [[Configurar el editor de texto html (CKEditor) en Liferay]]&lt;br /&gt;
* [[Custom Fields en Liferay]]&lt;br /&gt;
* [[Compatibilidades CSS en Internet Explorer]]&lt;br /&gt;
* [[Botones Redes Sociales]]&lt;br /&gt;
* [[JSON Service API en Liferay]]&lt;br /&gt;
* [[Templates en Liferay]]&lt;br /&gt;
* [[Visualización dinámica de web content en Liferay]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Encuesta con estilos propios en Liferay]]&lt;br /&gt;
* [[Embeber un portlet dentro de un theme en Liferay]]&lt;br /&gt;
* [[Tooltip de ayuda para un componente en Liferay]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6913</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6913"/>
				<updated>2013-09-11T15:07:39Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Internacionalización */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Internacionalización ==&lt;br /&gt;
Liferay provee la internacionalización de un set amplio de idiomas, en el caso de que no se encuentre el idioma ó el dialecto especifico que necesitas, con los siguientes pasas lo podes agregar.&lt;br /&gt;
&lt;br /&gt;
En este caso vamos a gregar el dialecto de Argentina &amp;lt;b&amp;gt;es_AR&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Agregar la propiedad &amp;quot;locales&amp;quot; al archivo portal-ext.properties, ubicado en el directorio LIFERAY_PORTAL/WEB_INF/classes, en el caso de que no exista el archivo crearlo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
locales=ar_SA,eu_ES,bg_BG,ca_AD,ca_ES,zh_CN,zh_TW,hr_HR,cs_CZ,nl_NL,nl_BE,en_US,en_GB,et_EE,fi_FI,fr_FR,gl_ES,de_DE,el_GR,iw_IL,hi_IN,hu_HU,in_ID,it_IT,ja_JP,ko_KR,nb_NO,fa_IR,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,sr_RS,sr_RS_latin,sl_SI,sk_SK,es_ES,sv_SE,tr_TR,uk_UA,vi_VN,es_AR&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agregar en el archivo web.xml ubicado en LIFERAY_PORTAL/WEB_INF/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;
    &amp;lt;servlet-name&amp;gt;I18n Servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
    &amp;lt;url-pattern&amp;gt;/es_AR/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por último agregar el archivo Language_es_AR.properties en el directorio LIFERAY_PORTAL/WEB_INF/src/content y reiniciar el portal.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
* [[Ejecuciones automaticas en Liferay]]&lt;br /&gt;
* [[Maven en Liferay]]&lt;br /&gt;
* [[Hooks en Liferay]]&lt;br /&gt;
* [[Internacionalizar un texto dentro de un theme en Liferay]]&lt;br /&gt;
* [[Hacer un layout responsive con bootstrap en Liferay]]&lt;br /&gt;
* [[Configurar el editor de texto html (CKEditor) en Liferay]]&lt;br /&gt;
* [[Custom Fields en Liferay]]&lt;br /&gt;
* [[Compatibilidades CSS en Internet Explorer]]&lt;br /&gt;
* [[Botones Redes Sociales]]&lt;br /&gt;
* [[JSON Service API en Liferay]]&lt;br /&gt;
* [[Templates en Liferay]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Encuesta con estilos propios en Liferay]]&lt;br /&gt;
* [[Embeber un portlet dentro de un theme en Liferay]]&lt;br /&gt;
* [[Tooltip de ayuda para un componente en Liferay]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6912</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6912"/>
				<updated>2013-09-11T13:20:34Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Listas dinámicas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
=== Internacionalización ===&lt;br /&gt;
Liferay provee la internacionalización de un set amplio de idiomas, en el caso de que no se encuentre el idioma ó el dialecto especifico que necesitas, con los siguientes pasas lo podes agregar.&lt;br /&gt;
&lt;br /&gt;
En este caso vamos a gregar el dialecto de Argentina &amp;lt;b&amp;gt;es_AR&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Agregar la propiedad &amp;quot;locales&amp;quot; al archivo portal-ext.properties, ubicado en el directorio LIFERAY_PORTAL/WEB_INF/classes, en el caso de que no exista el archivo crearlo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
locales=ar_SA,eu_ES,bg_BG,ca_AD,ca_ES,zh_CN,zh_TW,hr_HR,cs_CZ,nl_NL,nl_BE,en_US,en_GB,et_EE,fi_FI,fr_FR,gl_ES,de_DE,el_GR,iw_IL,hi_IN,hu_HU,in_ID,it_IT,ja_JP,ko_KR,nb_NO,fa_IR,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,sr_RS,sr_RS_latin,sl_SI,sk_SK,es_ES,sv_SE,tr_TR,uk_UA,vi_VN,es_AR&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agregar en el archivo web.xml ubicado en LIFERAY_PORTAL/WEB_INF/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;
    &amp;lt;servlet-name&amp;gt;I18n Servlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;
    &amp;lt;url-pattern&amp;gt;/es_AR/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;
  &amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por último agregar el archivo Language_es_AR.properties en el directorio LIFERAY_PORTAL/WEB_INF/src/content y reiniciar el portal.&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
* [[Ejecuciones automaticas en Liferay]]&lt;br /&gt;
* [[Maven en Liferay]]&lt;br /&gt;
* [[Hooks en Liferay]]&lt;br /&gt;
* [[Internacionalizar un texto dentro de un theme en Liferay]]&lt;br /&gt;
* [[Hacer un layout responsive con bootstrap en Liferay]]&lt;br /&gt;
* [[Configurar el editor de texto html (CKEditor) en Liferay]]&lt;br /&gt;
* [[Custom Fields en Liferay]]&lt;br /&gt;
* [[Compatibilidades CSS en Internet Explorer]]&lt;br /&gt;
* [[Botones Redes Sociales]]&lt;br /&gt;
* [[JSON Service API en Liferay]]&lt;br /&gt;
* [[Templates en Liferay]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Encuesta con estilos propios en Liferay]]&lt;br /&gt;
* [[Embeber un portlet dentro de un theme en Liferay]]&lt;br /&gt;
* [[Tooltip de ayuda para un componente en Liferay]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6904</id>
		<title>JSON Service API en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6904"/>
				<updated>2013-08-12T19:45:04Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ejecución Remota */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.dosideas.com/wiki/Liferay_Portal Liferay] proporciona Servicios Web como API JSON. Esto permite un fácil acceso a servicios utilizando HTTP no sólo desde javascript, sino también desde cualquier cliente HTTP que interprete JSON. Cada portal posee una UI mediante la cual podemos consultar y ejecutar los servicios expuestos. ([http://www.liferay.com/api/jsonws sitio oficial ] – [http://localhost:8080/api/jsonws Instancia local])&lt;br /&gt;
&lt;br /&gt;
Existen varias formas de invocar estos servicios, a continuación se muestran un par de ejemplos utilizando librerías propias de [http://www.dosideas.com/wiki/Liferay_Portal Liferay].&lt;br /&gt;
&lt;br /&gt;
=== Ejecución Remota ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener 5 entradas pertenecientes a un grupo especifico.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service(&lt;br /&gt;
  '/bookmarksentry/get-group-entries',&lt;br /&gt;
  {&lt;br /&gt;
    p_auth: Liferay.authToken,&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  },&lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    }else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
);    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejecución Local ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener 5 entradas pertenecientes a un grupo especifico. Para poder utilizar estos servicios es necesario incluir el JS service.js, en este archivo se encuentran definidos todos los servicio que expone [http://www.dosideas.com/wiki/Liferay_Portal Liferay] por defecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src=&amp;quot;/html/js/liferay/service.js&amp;quot; language=&amp;quot;JavaScript&amp;quot;&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service.Bookmarks.BookmarksEntry.getGroupEntries(&lt;br /&gt;
  {&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  }, &lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    } else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/JSON+Web+Services Wiki sitio oficial Liferay]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6902</id>
		<title>JSON Service API en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6902"/>
				<updated>2013-08-12T18:14:56Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ejecuación Remota */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.dosideas.com/wiki/Liferay_Portal Liferay] proporciona Servicios Web como API JSON. Esto permite un fácil acceso a servicios utilizando HTTP no sólo desde javascript, sino también desde cualquier cliente HTTP que interprete JSON. Cada portal posee una UI mediante la cual podemos consultar y ejecutar los servicios expuestos. ([http://www.liferay.com/api/jsonws sitio oficial ] – [http://localhost:8080/api/jsonws Instancia local])&lt;br /&gt;
&lt;br /&gt;
Existen varias formas de invocar estos servicios, a continuación se muestran un par de ejemplos utilizando librerías propias de [http://www.dosideas.com/wiki/Liferay_Portal Liferay].&lt;br /&gt;
&lt;br /&gt;
=== Ejecución Remota ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener 5 entradas pertenecientes a un grupo especifico.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service(&lt;br /&gt;
  '/bookmarksentry/get-group-entries',&lt;br /&gt;
  {&lt;br /&gt;
    p_auth: Liferay.authToken,&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  },&lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    }else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
  }&lt;br /&gt;
});    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejecución Local ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener 5 entradas pertenecientes a un grupo especifico. Para poder utilizar estos servicios es necesario incluir el JS service.js, en este archivo se encuentran definidos todos los servicio que expone [http://www.dosideas.com/wiki/Liferay_Portal Liferay] por defecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src=&amp;quot;/html/js/liferay/service.js&amp;quot; language=&amp;quot;JavaScript&amp;quot;&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service.Bookmarks.BookmarksEntry.getGroupEntries(&lt;br /&gt;
  {&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  }, &lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    } else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/JSON+Web+Services Wiki sitio oficial Liferay]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6901</id>
		<title>JSON Service API en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6901"/>
				<updated>2013-08-12T18:14:27Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ejecución Local */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.dosideas.com/wiki/Liferay_Portal Liferay] proporciona Servicios Web como API JSON. Esto permite un fácil acceso a servicios utilizando HTTP no sólo desde javascript, sino también desde cualquier cliente HTTP que interprete JSON. Cada portal posee una UI mediante la cual podemos consultar y ejecutar los servicios expuestos. ([http://www.liferay.com/api/jsonws sitio oficial ] – [http://localhost:8080/api/jsonws Instancia local])&lt;br /&gt;
&lt;br /&gt;
Existen varias formas de invocar estos servicios, a continuación se muestran un par de ejemplos utilizando librerías propias de [http://www.dosideas.com/wiki/Liferay_Portal Liferay].&lt;br /&gt;
&lt;br /&gt;
=== Ejecuación Remota ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener 5 entradas pertenecientes a un grupo especifico.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service(&lt;br /&gt;
  '/bookmarksentry/get-group-entries',&lt;br /&gt;
  {&lt;br /&gt;
    p_auth: Liferay.authToken,&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  },&lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    }else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
  }&lt;br /&gt;
});    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejecución Local ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener 5 entradas pertenecientes a un grupo especifico. Para poder utilizar estos servicios es necesario incluir el JS service.js, en este archivo se encuentran definidos todos los servicio que expone [http://www.dosideas.com/wiki/Liferay_Portal Liferay] por defecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src=&amp;quot;/html/js/liferay/service.js&amp;quot; language=&amp;quot;JavaScript&amp;quot;&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service.Bookmarks.BookmarksEntry.getGroupEntries(&lt;br /&gt;
  {&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  }, &lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    } else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/JSON+Web+Services Wiki sitio oficial Liferay]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6900</id>
		<title>JSON Service API en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6900"/>
				<updated>2013-08-12T18:14:12Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ejecuación Remota */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.dosideas.com/wiki/Liferay_Portal Liferay] proporciona Servicios Web como API JSON. Esto permite un fácil acceso a servicios utilizando HTTP no sólo desde javascript, sino también desde cualquier cliente HTTP que interprete JSON. Cada portal posee una UI mediante la cual podemos consultar y ejecutar los servicios expuestos. ([http://www.liferay.com/api/jsonws sitio oficial ] – [http://localhost:8080/api/jsonws Instancia local])&lt;br /&gt;
&lt;br /&gt;
Existen varias formas de invocar estos servicios, a continuación se muestran un par de ejemplos utilizando librerías propias de [http://www.dosideas.com/wiki/Liferay_Portal Liferay].&lt;br /&gt;
&lt;br /&gt;
=== Ejecuación Remota ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener 5 entradas pertenecientes a un grupo especifico.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service(&lt;br /&gt;
  '/bookmarksentry/get-group-entries',&lt;br /&gt;
  {&lt;br /&gt;
    p_auth: Liferay.authToken,&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  },&lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    }else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
  }&lt;br /&gt;
});    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejecución Local ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico. Para poder utilizar estos servicios es necesario incluir el JS service.js, en este archivo se encuentran definidos todos los servicio que expone [http://www.dosideas.com/wiki/Liferay_Portal Liferay] por defecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src=&amp;quot;/html/js/liferay/service.js&amp;quot; language=&amp;quot;JavaScript&amp;quot;&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service.Bookmarks.BookmarksEntry.getGroupEntries(&lt;br /&gt;
  {&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  }, &lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    } else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/JSON+Web+Services Wiki sitio oficial Liferay]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6899</id>
		<title>JSON Service API en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6899"/>
				<updated>2013-08-12T18:13:11Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.dosideas.com/wiki/Liferay_Portal Liferay] proporciona Servicios Web como API JSON. Esto permite un fácil acceso a servicios utilizando HTTP no sólo desde javascript, sino también desde cualquier cliente HTTP que interprete JSON. Cada portal posee una UI mediante la cual podemos consultar y ejecutar los servicios expuestos. ([http://www.liferay.com/api/jsonws sitio oficial ] – [http://localhost:8080/api/jsonws Instancia local])&lt;br /&gt;
&lt;br /&gt;
Existen varias formas de invocar estos servicios, a continuación se muestran un par de ejemplos utilizando librerías propias de [http://www.dosideas.com/wiki/Liferay_Portal Liferay].&lt;br /&gt;
&lt;br /&gt;
=== Ejecuación Remota ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service(&lt;br /&gt;
  '/bookmarksentry/get-group-entries',&lt;br /&gt;
  {&lt;br /&gt;
    p_auth: Liferay.authToken,&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  },&lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    }else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
  }&lt;br /&gt;
});    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejecución Local ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico. Para poder utilizar estos servicios es necesario incluir el JS service.js, en este archivo se encuentran definidos todos los servicio que expone [http://www.dosideas.com/wiki/Liferay_Portal Liferay] por defecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src=&amp;quot;/html/js/liferay/service.js&amp;quot; language=&amp;quot;JavaScript&amp;quot;&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service.Bookmarks.BookmarksEntry.getGroupEntries(&lt;br /&gt;
  {&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  }, &lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    } else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/JSON+Web+Services Wiki sitio oficial Liferay]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6898</id>
		<title>JSON Service API en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6898"/>
				<updated>2013-08-12T18:12:35Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.dosideas.com/wiki/Liferay_Portal Liferay] proporciona Servicios Web como API JSON. Esto permite un fácil acceso a servicios utilizando HTTP no sólo desde javascript, sino también desde cualquier cliente HTTP que interprete JSON. Cada portal posee una UI mediante la cual podemos consultar y ejecutar los servicios expuestos. ([http://www.liferay.com/api/jsonws sitio oficial ] – [http://localhost:8080/api/jsonws Instancia local])&lt;br /&gt;
&lt;br /&gt;
Existen varias formas de invocar estos servicios, a continuación se muestran un par de ejemplos utilizando librerías propias de [http://www.dosideas.com/wiki/Liferay_Portal Liferay].&lt;br /&gt;
&lt;br /&gt;
=== Ejecuación Remota ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service(&lt;br /&gt;
  '/bookmarksentry/get-group-entries',&lt;br /&gt;
  {&lt;br /&gt;
    p_auth: Liferay.authToken,&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  },&lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    }else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
  }&lt;br /&gt;
});    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejecución Local ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico. Para poder utilizar estos servicios es necesario incluir el JS service.js, en este archivo se encuentran definidos todos los servicio que expone [http://www.dosideas.com/wiki/Liferay_Portal Liferay] por defecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src=&amp;quot;/html/js/liferay/service.js&amp;quot; language=&amp;quot;JavaScript&amp;quot;&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service.Bookmarks.BookmarksEntry.getGroupEntries(&lt;br /&gt;
  {&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  }, &lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    } else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/JSON+Web+Services Wiki sitio oficial Liferay]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6897</id>
		<title>JSON Service API en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6897"/>
				<updated>2013-08-12T18:12:09Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.dosideas.com/wiki/Liferay_Portal Liferay] proporciona Servicios Web como API JSON. Esto permite un fácil acceso a servicios utilizando HTTP no sólo desde javascript, sino también desde cualquier cliente HTTP que interprete JSON. Cada portal posee una UI mediante la cual podemos consultar y ejecutar los servicios expuestos. ([http://www.liferay.com/api/jsonws sitio oficial ] – [http://localhost:8080/api/jsonws Instancia local])&lt;br /&gt;
&lt;br /&gt;
Existen varias formas de invocar estos servicios, a continuación se muestran un par de ejemplos utilizando librerías propias de [http://www.dosideas.com/wiki/Liferay_Portal Liferay].&lt;br /&gt;
&lt;br /&gt;
=== Ejecuación Remota ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service(&lt;br /&gt;
  '/bookmarksentry/get-group-entries',&lt;br /&gt;
  {&lt;br /&gt;
    p_auth: Liferay.authToken,&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  },&lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    }else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
  }&lt;br /&gt;
});    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejecución Local ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico. Para poder utilizar estos servicios es necesario incluir el JS service.js, en este archivo se encuentran definidos todos los servicio que expone [http://www.dosideas.com/wiki/Liferay_Portal Liferay] por defecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src=&amp;quot;/html/js/liferay/service.js&amp;quot; language=&amp;quot;JavaScript&amp;quot;&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service.Bookmarks.BookmarksEntry.getGroupEntries(&lt;br /&gt;
  {&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  }, &lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    } else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [Wiki sitio oficial Liferay http://www.liferay.com/es/community/wiki/-/wiki/Main/JSON+Web+Services]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6896</id>
		<title>JSON Service API en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6896"/>
				<updated>2013-08-12T18:10:24Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.dosideas.com/wiki/Liferay_Portal Liferay] proporciona Servicios Web como API JSON. Esto permite un fácil acceso a servicios utilizando HTTP no sólo desde javascript, sino también desde cualquier cliente HTTP que interprete JSON. Cada portal posee una UI mediante la cual podemos consultar y ejecutar los servicios expuestos. ([http://www.liferay.com/api/jsonws sitio oficial ] – [http://localhost:8080/api/jsonws Instancia local])&lt;br /&gt;
&lt;br /&gt;
Existen varias formas de invocar estos servicios, a continuación se muestran un par de ejemplos utilizando librerías propias de [http://www.dosideas.com/wiki/Liferay_Portal Liferay].&lt;br /&gt;
&lt;br /&gt;
=== Ejecuación Remota ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service(&lt;br /&gt;
  '/bookmarksentry/get-group-entries',&lt;br /&gt;
  {&lt;br /&gt;
    p_auth: Liferay.authToken,&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  },&lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    }else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
  }&lt;br /&gt;
});    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejecución Local ===&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico. Para poder utilizar estos servicios es necesario incluir el JS service.js, en este archivo se encuentran definidos todos los servicio que expone [http://www.dosideas.com/wiki/Liferay_Portal Liferay] por defecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src=&amp;quot;/html/js/liferay/service.js&amp;quot; language=&amp;quot;JavaScript&amp;quot;&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service.Bookmarks.BookmarksEntry.getGroupEntries(&lt;br /&gt;
  {&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  }, &lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    } else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
*[[Wiki sitio oficial Liferay http://www.liferay.com/es/community/wiki/-/wiki/Main/JSON+Web+Services]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6895</id>
		<title>JSON Service API en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=JSON_Service_API_en_Liferay&amp;diff=6895"/>
				<updated>2013-08-12T18:09:50Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: Página creada con '[http://www.dosideas.com/wiki/Liferay_Portal Liferay] proporciona Servicios Web como API JSON. Esto permite un fácil acceso a servicios utilizando HTTP no sólo desde javascrip…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.dosideas.com/wiki/Liferay_Portal Liferay] proporciona Servicios Web como API JSON. Esto permite un fácil acceso a servicios utilizando HTTP no sólo desde javascript, sino también desde cualquier cliente HTTP que interprete JSON. Cada portal posee una UI mediante la cual podemos consultar y ejecutar los servicios expuestos. ([http://www.liferay.com/api/jsonws sitio oficial ] – [http://localhost:8080/api/jsonws Instancia local])&lt;br /&gt;
&lt;br /&gt;
Existen varias formas de invocar estos servicios, a continuación se muestran un par de ejemplos utilizando librerías propias de [http://www.dosideas.com/wiki/Liferay_Portal Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ejecuación Remota ==&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service(&lt;br /&gt;
  '/bookmarksentry/get-group-entries',&lt;br /&gt;
  {&lt;br /&gt;
    p_auth: Liferay.authToken,&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  },&lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    }else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
  }&lt;br /&gt;
});    &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejecución Local ==&lt;br /&gt;
En este ejemplo podemos ver como invocar al servicio de Bookmarks para obtener las entradas pertenecientes a un grupo especifico. Para poder utilizar estos servicios es necesario incluir el JS service.js, en este archivo se encuentran definidos todos los servicio que expone [http://www.dosideas.com/wiki/Liferay_Portal Liferay] por defecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;script src=&amp;quot;/html/js/liferay/service.js&amp;quot; language=&amp;quot;JavaScript&amp;quot;&amp;gt; &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Liferay.Service.Bookmarks.BookmarksEntry.getGroupEntries(&lt;br /&gt;
  {&lt;br /&gt;
    groupId: themeDisplay.getParentGroupId(),&lt;br /&gt;
    start: 0,&lt;br /&gt;
    end: 4&lt;br /&gt;
  }, &lt;br /&gt;
  function(result) {&lt;br /&gt;
    var exception = result.exception;&lt;br /&gt;
    if (!exception) {&lt;br /&gt;
      console.log(result);&lt;br /&gt;
    } else {&lt;br /&gt;
      alert(&amp;quot;Error: &amp;quot;+exception);&lt;br /&gt;
    }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ver también ===&lt;br /&gt;
*[[Wiki sitio oficial Liferay http://www.liferay.com/es/community/wiki/-/wiki/Main/JSON+Web+Services]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6894</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6894"/>
				<updated>2013-08-12T14:59:59Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
* [[Ejecuciones automaticas en Liferay]]&lt;br /&gt;
* [[Maven en Liferay]]&lt;br /&gt;
* [[Hooks en Liferay]]&lt;br /&gt;
* [[Internacionalizar un texto dentro de un theme en Liferay]]&lt;br /&gt;
* [[Hacer un layout responsive con bootstrap en Liferay]]&lt;br /&gt;
* [[Configurar el editor de texto html (CKEditor) en Liferay]]&lt;br /&gt;
* [[Custom Fields en Liferay]]&lt;br /&gt;
* [[Compatibilidades CSS en Internet Explorer]]&lt;br /&gt;
* [[Botones Redes Sociales]]&lt;br /&gt;
* [[JSON Service API en Liferay]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Encuesta con estilos propios en Liferay]]&lt;br /&gt;
* [[Embeber un portlet dentro de un theme en Liferay]]&lt;br /&gt;
* [[Tooltip de ayuda para un componente en Liferay]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Custom_Fields_en_Liferay&amp;diff=6872</id>
		<title>Custom Fields en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Custom_Fields_en_Liferay&amp;diff=6872"/>
				<updated>2013-08-02T12:40:10Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta utilidad permite definir variables propias dentro de determinados recursos, por ejemplo sitio, pagina, usuario, etc. Estas variables se exponen mediante [http://www.liferay.com/es/community/wiki/-/wiki/Main/Developing+with+Expando  Liferay’s ExpandoService].&lt;br /&gt;
&lt;br /&gt;
=== Web Content ===&lt;br /&gt;
En este ejemplo se muestra como acceder, mediante [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/velocity-engine Velocity], al Custom Field --fecha-- definido dentro del recurso Web Content.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## Servicio para buscar los artículos publicados.&lt;br /&gt;
#set ($journalArticleLocalService = $serviceLocator.findService('com.liferay.portlet.journal.service.JournalArticleLocalService'))&lt;br /&gt;
&lt;br /&gt;
## GroupId.&lt;br /&gt;
#set($groupId = $getterUtil.getLong($request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;scope-group-id&amp;quot;)))&lt;br /&gt;
&lt;br /&gt;
## Retorna el articulo actual.&lt;br /&gt;
#set ($currentArticle = $journalArticleLocalService.getArticle($getterUtil.getLong($groupId), $reserved-article-id.data, $getterUtil.getDouble($reserved-article-version.data)))&lt;br /&gt;
&lt;br /&gt;
## companyId.&lt;br /&gt;
#set ($companyId = $getterUtil.getLong($request.theme-display.company-id))&lt;br /&gt;
&lt;br /&gt;
## ExpandoService, retorna el valor del custom field --fecha-- del --currentArticle--.&lt;br /&gt;
#set($fecha = $expandoValueLocalService.getData($companyId, &amp;quot;com.liferay.portlet.journal.model.JournalArticle&amp;quot;, &amp;quot;CUSTOM_FIELDS&amp;quot;, &amp;quot;fecha&amp;quot;, $currentArticle.id))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Texto: $text.data -- Fecha: $fecha&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
[http://www.liferay.com/es/community/wiki/-/wiki/Main/Custom+fields Wiki oficial de Liferay]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Liferay Custom_Fields]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6871</id>
		<title>Dynamic Query en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6871"/>
				<updated>2013-08-02T12:39:53Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liferay, a partir de la versión 5.1, proporcionar acceso a la API de consulta dinámica de Hibernate. Esto permite realizar consultas complejas sobre las estructuras o lista dinámicas que existan en el portal.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Query + Velocity ==&lt;br /&gt;
En este ejemplo se muestra como implementar las consultas dinámicas en un Template de una [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/creating-data-lists Lista dinámica]. La consulta obtiene los 20 primeros registros del usuario registrado ordenados de forma descendentepor fecha de modificación.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## Obtiene el userId.&lt;br /&gt;
#set($userId = $request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;user-id&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el servicio para ejecutar las consultas dinamicas.&lt;br /&gt;
#set ($ddlLocalService = $serviceLocator.findService('com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService'))&lt;br /&gt;
&lt;br /&gt;
##Obtiene el id de la lista.&lt;br /&gt;
#set ($recordSetId = $getterUtil.getLong($reserved_record_set_id.data, 0))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el tipo de respuesta para la consulta dinamica.&lt;br /&gt;
#set ($DDLrecordClass = $portal.getClass().forName(&amp;quot;com.liferay.portlet.dynamicdatalists.model.DDLRecord&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
##Utilidad para armar consultas dinamicas.&lt;br /&gt;
#set ($dqfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Utilidad para agregar ordenamiento a la consulta dinamica.&lt;br /&gt;
#set ($ofu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.OrderFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Restricciones&lt;br /&gt;
#set ($rfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Query&lt;br /&gt;
#set ($q = $dqfu.forClass($DDLrecordClass))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;recordSetId&amp;quot;, $getterUtil.getLong($recordSetId))))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;userId&amp;quot;, $getterUtil.getLong($userId))))  &lt;br /&gt;
#set ($V = $q.addOrder($ofu.desc(&amp;quot;modifiedDate&amp;quot;)))  &lt;br /&gt;
#set ($records = $ddlLocalService.dynamicQuery($q,0,20))  &lt;br /&gt;
&lt;br /&gt;
#foreach($record in $records)&lt;br /&gt;
    #set ($titulo = $record.getField(&amp;quot;Titulo&amp;quot;).getValue())&lt;br /&gt;
    #set ($link = $record.getField(&amp;quot;Link&amp;quot;).getValue())&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;$link&amp;quot;&amp;gt;$titulo&amp;lt;/a&amp;gt; &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver Tambien ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/Queries+2%3A+DynamicQuery+API Wiki Liferay]&lt;br /&gt;
&lt;br /&gt;
[[Category:Liferay Dynammic_Query]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6870</id>
		<title>Dynamic Query en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6870"/>
				<updated>2013-08-02T12:38:40Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liferay, a partir de la versión 5.1, proporcionar acceso a la API de consulta dinámica de Hibernate. Esto permite realizar consultas complejas sobre las estructuras o lista dinámicas que existan en el portal.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Query + Velocity ==&lt;br /&gt;
En este ejemplo se muestra como implementar las consultas dinámicas en un Template de una [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/creating-data-lists Lista dinámica]. La consulta obtiene los 20 primeros registros del usuario registrado ordenados de forma descendentepor fecha de modificación.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## Obtiene el userId.&lt;br /&gt;
#set($userId = $request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;user-id&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el servicio para ejecutar las consultas dinamicas.&lt;br /&gt;
#set ($ddlLocalService = $serviceLocator.findService('com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService'))&lt;br /&gt;
&lt;br /&gt;
##Obtiene el id de la lista.&lt;br /&gt;
#set ($recordSetId = $getterUtil.getLong($reserved_record_set_id.data, 0))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el tipo de respuesta para la consulta dinamica.&lt;br /&gt;
#set ($DDLrecordClass = $portal.getClass().forName(&amp;quot;com.liferay.portlet.dynamicdatalists.model.DDLRecord&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
##Utilidad para armar consultas dinamicas.&lt;br /&gt;
#set ($dqfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Utilidad para agregar ordenamiento a la consulta dinamica.&lt;br /&gt;
#set ($ofu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.OrderFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Restricciones&lt;br /&gt;
#set ($rfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Query&lt;br /&gt;
#set ($q = $dqfu.forClass($DDLrecordClass))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;recordSetId&amp;quot;, $getterUtil.getLong($recordSetId))))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;userId&amp;quot;, $getterUtil.getLong($userId))))  &lt;br /&gt;
#set ($V = $q.addOrder($ofu.desc(&amp;quot;modifiedDate&amp;quot;)))  &lt;br /&gt;
#set ($records = $ddlLocalService.dynamicQuery($q,0,20))  &lt;br /&gt;
&lt;br /&gt;
#foreach($record in $records)&lt;br /&gt;
    #set ($titulo = $record.getField(&amp;quot;Titulo&amp;quot;).getValue())&lt;br /&gt;
    #set ($link = $record.getField(&amp;quot;Link&amp;quot;).getValue())&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;$link&amp;quot;&amp;gt;$titulo&amp;lt;/a&amp;gt; &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver Tambien ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/Queries+2%3A+DynamicQuery+API Wiki Liferay]&lt;br /&gt;
&lt;br /&gt;
[[Category:Liferay &amp;quot;Dynammic Query&amp;quot;]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6869</id>
		<title>Dynamic Query en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6869"/>
				<updated>2013-08-02T12:38:11Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liferay, a partir de la versión 5.1, proporcionar acceso a la API de consulta dinámica de Hibernate. Esto permite realizar consultas complejas sobre las estructuras o lista dinámicas que existan en el portal.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Query + Velocity ==&lt;br /&gt;
En este ejemplo se muestra como implementar las consultas dinámicas en un Template de una [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/creating-data-lists Lista dinámica]. La consulta obtiene los 20 primeros registros del usuario registrado ordenados de forma descendentepor fecha de modificación.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## Obtiene el userId.&lt;br /&gt;
#set($userId = $request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;user-id&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el servicio para ejecutar las consultas dinamicas.&lt;br /&gt;
#set ($ddlLocalService = $serviceLocator.findService('com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService'))&lt;br /&gt;
&lt;br /&gt;
##Obtiene el id de la lista.&lt;br /&gt;
#set ($recordSetId = $getterUtil.getLong($reserved_record_set_id.data, 0))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el tipo de respuesta para la consulta dinamica.&lt;br /&gt;
#set ($DDLrecordClass = $portal.getClass().forName(&amp;quot;com.liferay.portlet.dynamicdatalists.model.DDLRecord&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
##Utilidad para armar consultas dinamicas.&lt;br /&gt;
#set ($dqfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Utilidad para agregar ordenamiento a la consulta dinamica.&lt;br /&gt;
#set ($ofu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.OrderFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Restricciones&lt;br /&gt;
#set ($rfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Query&lt;br /&gt;
#set ($q = $dqfu.forClass($DDLrecordClass))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;recordSetId&amp;quot;, $getterUtil.getLong($recordSetId))))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;userId&amp;quot;, $getterUtil.getLong($userId))))  &lt;br /&gt;
#set ($V = $q.addOrder($ofu.desc(&amp;quot;modifiedDate&amp;quot;)))  &lt;br /&gt;
#set ($records = $ddlLocalService.dynamicQuery($q,0,20))  &lt;br /&gt;
&lt;br /&gt;
#foreach($record in $records)&lt;br /&gt;
    #set ($titulo = $record.getField(&amp;quot;Titulo&amp;quot;).getValue())&lt;br /&gt;
    #set ($link = $record.getField(&amp;quot;Link&amp;quot;).getValue())&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;$link&amp;quot;&amp;gt;$titulo&amp;lt;/a&amp;gt; &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver Tambien ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/Queries+2%3A+DynamicQuery+API Wiki Liferay]&lt;br /&gt;
&lt;br /&gt;
[[Category:Liferay Dynammic Query]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Java&amp;diff=6868</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Java&amp;diff=6868"/>
				<updated>2013-08-02T12:37:23Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Java es un lenguaje de programación, aunque también se suele hacer referencia con este nombre a toda una plataforma para el desarrollo de aplicaciones. Hay un buen [http://es.wikipedia.org/wiki/Java_%28Sun%29 resumen de Java en la wikipedia].&lt;br /&gt;
&lt;br /&gt;
Al desarrollar un sistema se suele basar en una [[Arquitectura De Software]] para crear los componentes.&lt;br /&gt;
&lt;br /&gt;
Java se caracteriza por una enorme cantidad de proyectos libres.&lt;br /&gt;
&lt;br /&gt;
== Algunas tecnologías Java ==&lt;br /&gt;
=== Frameworks de base===&lt;br /&gt;
* [[Spring Framework]]&lt;br /&gt;
* [[Terracotta]]&lt;br /&gt;
* [[EJB]]&lt;br /&gt;
* [[Restlet]]&lt;br /&gt;
&lt;br /&gt;
===Acceso a datos===&lt;br /&gt;
* [[Hibernate]]&lt;br /&gt;
* [[Apache Lucene]]&lt;br /&gt;
&lt;br /&gt;
===Frameworks de presentación===&lt;br /&gt;
* [[Apache Tiles]]&lt;br /&gt;
* [[Struts]]&lt;br /&gt;
* [[JSF]]&lt;br /&gt;
* [[JSTL]]&lt;br /&gt;
* [[GWT]]&lt;br /&gt;
* [[SiteMesh 2]]&lt;br /&gt;
&lt;br /&gt;
===Librerías===&lt;br /&gt;
* [[Google Guava]]&lt;br /&gt;
* [[Jawr]]&lt;br /&gt;
&lt;br /&gt;
===Mensajeria===&lt;br /&gt;
* [[JMS]]&lt;br /&gt;
&lt;br /&gt;
===Web Services===&lt;br /&gt;
* [[Web Service]]&lt;br /&gt;
* [[Web Service Con Spring]]&lt;br /&gt;
&lt;br /&gt;
===Ejecuciones batch y programadas===&lt;br /&gt;
* [[Quartz]]&lt;br /&gt;
* [[Spring Batch]]&lt;br /&gt;
&lt;br /&gt;
===Seguridad===&lt;br /&gt;
* [[Spring Security]]&lt;br /&gt;
&lt;br /&gt;
===Cuestiones generales de Java===&lt;br /&gt;
* [[Validaciones de XML contra XSD En Java]]&lt;br /&gt;
* [[Fechas En Java]]&lt;br /&gt;
* [[Numeros En Java]]&lt;br /&gt;
* [[Encoding En Java]]&lt;br /&gt;
* [[Serializacion De Objetos En Java]]&lt;br /&gt;
* [[Log4J]]&lt;br /&gt;
* [[SLF4J]]&lt;br /&gt;
* [[Cache De Objetos Java]]&lt;br /&gt;
* [[Exportacion Hacia Archivos]]&lt;br /&gt;
* [[Javadump]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Custom_Fields_en_Liferay&amp;diff=6867</id>
		<title>Custom Fields en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Custom_Fields_en_Liferay&amp;diff=6867"/>
				<updated>2013-08-02T12:37:08Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: Página creada con 'Esta utilidad permite definir variables propias dentro de determinados recursos, por ejemplo sitio, pagina, usuario, etc. Estas variables se exponen mediante [http://www.liferay…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Esta utilidad permite definir variables propias dentro de determinados recursos, por ejemplo sitio, pagina, usuario, etc. Estas variables se exponen mediante [http://www.liferay.com/es/community/wiki/-/wiki/Main/Developing+with+Expando  Liferay’s ExpandoService].&lt;br /&gt;
&lt;br /&gt;
=== Web Content ===&lt;br /&gt;
En este ejemplo se muestra como acceder, mediante [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/velocity-engine Velocity], al Custom Field --fecha-- definido dentro del recurso Web Content.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## Servicio para buscar los artículos publicados.&lt;br /&gt;
#set ($journalArticleLocalService = $serviceLocator.findService('com.liferay.portlet.journal.service.JournalArticleLocalService'))&lt;br /&gt;
&lt;br /&gt;
## GroupId.&lt;br /&gt;
#set($groupId = $getterUtil.getLong($request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;scope-group-id&amp;quot;)))&lt;br /&gt;
&lt;br /&gt;
## Retorna el articulo actual.&lt;br /&gt;
#set ($currentArticle = $journalArticleLocalService.getArticle($getterUtil.getLong($groupId), $reserved-article-id.data, $getterUtil.getDouble($reserved-article-version.data)))&lt;br /&gt;
&lt;br /&gt;
## companyId.&lt;br /&gt;
#set ($companyId = $getterUtil.getLong($request.theme-display.company-id))&lt;br /&gt;
&lt;br /&gt;
## ExpandoService, retorna el valor del custom field --fecha-- del --currentArticle--.&lt;br /&gt;
#set($fecha = $expandoValueLocalService.getData($companyId, &amp;quot;com.liferay.portlet.journal.model.JournalArticle&amp;quot;, &amp;quot;CUSTOM_FIELDS&amp;quot;, &amp;quot;fecha&amp;quot;, $currentArticle.id))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Texto: $text.data -- Fecha: $fecha&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
[http://www.liferay.com/es/community/wiki/-/wiki/Main/Custom+fields Wiki oficial de Liferay]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Liferay Custom Fields]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6866</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6866"/>
				<updated>2013-08-02T11:49:26Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
* [[Ejecuciones automaticas en Liferay]]&lt;br /&gt;
* [[Maven en Liferay]]&lt;br /&gt;
* [[Hooks en Liferay]]&lt;br /&gt;
* [[Internacionalizar un texto dentro de un theme en Liferay]]&lt;br /&gt;
* [[Hacer un layout responsive con bootstrap en Liferay]]&lt;br /&gt;
* [[Configurar el editor de texto html (CKEditor) en Liferay]]&lt;br /&gt;
* [[Custom Fields en Liferay]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Encuesta con estilos propios en Liferay]]&lt;br /&gt;
* [[Embeber un portlet dentro de un theme en Liferay]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Apache_Derby&amp;diff=6865</id>
		<title>Apache Derby</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Apache_Derby&amp;diff=6865"/>
				<updated>2013-07-30T15:48:02Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Funciones propias */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Apache_Derby]] es una [[Base De Datos]] relacional de [[Software Libre]], implementada completamente en [[Java]]. &lt;br /&gt;
&lt;br /&gt;
== Características ==&lt;br /&gt;
&lt;br /&gt;
*Derby es muy liviano - cerca de 2 MB para el motor de la base y el driver JDBC embebido. &lt;br /&gt;
*Derby está basado en [[Java]], JDBC y estándares SQL. &lt;br /&gt;
*Derby provee un driver JDBC que permite embeber a Derby en cualquier solución Java. &lt;br /&gt;
*Derby también soporta el modo cliente/servidor. &lt;br /&gt;
*Derby es facil de instalar, desplegar y usar.&lt;br /&gt;
&lt;br /&gt;
Al ser una base de datos muy liviana es ideal para usarla en test unitarios. &lt;br /&gt;
&lt;br /&gt;
== Store Procedures en Derby ==&lt;br /&gt;
&lt;br /&gt;
Derby una de las pocas bases de datos de este estilo que nos permite usar Store Procedures con mas de un parámetro de output. De esta manera, es posible utilizar Derby para simular el compartamiento de Store Procedures en bases más complejas. &lt;br /&gt;
&lt;br /&gt;
=== Ejemplo  ===&lt;br /&gt;
&lt;br /&gt;
En Derby un Store Procedure es en realidad un objeto que llama a una clase java (externa a la base de datos). &lt;br /&gt;
&lt;br /&gt;
Si por ejemplo tenemos que probar el llamado a un store procedure de [[Oracle]], para realizar la [[Prueba Unitaria]], crearemos en [[Java]] una clase que simule el comportamiento del store procedure en [[Oracle]]: ante determinados parametros de entrada, debera devolver parametros de salida válidos. &lt;br /&gt;
&lt;br /&gt;
Los parametros de salida (OUT) y los parametros de entrada y salida (IN OUT) del procedure tienen que ser del tipo array en el metodo java. &lt;br /&gt;
&lt;br /&gt;
==== El Store Procedure en Derby  ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 package com.dosideas.derby;&lt;br /&gt;
 import java.sql.*;&lt;br /&gt;
 public class DerbyProcedures {&lt;br /&gt;
      public static void simuloComportamientoStore(int codigo, int[] codError, String[] desError)&lt;br /&gt;
      {&lt;br /&gt;
            if (codigo == 1) &lt;br /&gt;
            { &lt;br /&gt;
                  codError[0]=-1;&lt;br /&gt;
                  desError[0]=&amp;quot;Error 1&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            if (codigo == 2) &lt;br /&gt;
            { &lt;br /&gt;
                  codError[0]=-2;&lt;br /&gt;
                  desError[0]=&amp;quot;Error 2&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== La ejecución  ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 package com.dosideas.derby;&lt;br /&gt;
 import java.sql.*;&lt;br /&gt;
 public class Prueba {&lt;br /&gt;
 &lt;br /&gt;
      public static void main(String[] args) {&lt;br /&gt;
          try {         &lt;br /&gt;
            //Creamos la conexión a Derby&lt;br /&gt;
            Connection conn  = DriverManager.getConnection(&amp;quot;jdbc:derby:TestDB;create=true&amp;quot;);&lt;br /&gt;
         &lt;br /&gt;
&lt;br /&gt;
            //Creamos el Store Procedure en Derby&lt;br /&gt;
            stmt = conn.createStatement();&lt;br /&gt;
            stmt.execute(&amp;quot;create procedure simuloComportamientoStore&amp;quot;+&lt;br /&gt;
                         &amp;quot;(IN codigo INTEGER, &amp;quot; +&lt;br /&gt;
                         &amp;quot; OUT codError INTEGER, OUT desError VARCHAR(500)) &amp;quot; +&lt;br /&gt;
                         &amp;quot; parameter style java language java external name &amp;quot; +&lt;br /&gt;
                         &amp;quot; 'com.dosideas.derby.DerbyProcedures.simuloComportamientoStore'&amp;quot;);&lt;br /&gt;
            stmt.close();&lt;br /&gt;
&lt;br /&gt;
          &lt;br /&gt;
            //Invocamos al Store Procedure&lt;br /&gt;
            int codigo = 2;&lt;br /&gt;
            CallableStatement cstmt = conn.prepareCall(&amp;quot;call simuloComportamientoStore(?,?,?)&amp;quot;);&lt;br /&gt;
            cstmt.setInt(1, codigo);&lt;br /&gt;
            cstmt.registerOutParameter(2, Types.INTEGER);&lt;br /&gt;
            cstmt.registerOutParameter(3, Types.VARCHAR);  &lt;br /&gt;
            cstmt.execute();&lt;br /&gt;
 &lt;br /&gt;
            int cod = cstmt.getInt(2);&lt;br /&gt;
            String des = cstmt.getString(3);&lt;br /&gt;
            cstmt.close();&lt;br /&gt;
 &lt;br /&gt;
            conn.close();&lt;br /&gt;
 &lt;br /&gt;
            //Mostramos el resultado&lt;br /&gt;
            System.out.println(&amp;quot;Resultado --&amp;gt; &amp;quot; + String.valueOf(cod)+&amp;quot; &amp;quot;+des);&lt;br /&gt;
 &lt;br /&gt;
            //Eliminamos el Store Procedure&lt;br /&gt;
            Statement stmt = conn.createStatement();&lt;br /&gt;
            stmt.execute(&amp;quot;drop procedure simuloComportamientoStore&amp;quot;);&lt;br /&gt;
            stmt.close();&lt;br /&gt;
          } &lt;br /&gt;
          catch (SQLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Package en Derby  ==&lt;br /&gt;
&lt;br /&gt;
Para simular un package en Derby se tiene que crear un procedure que simule ser un package. Por ejemplo, si nosotros necesitamos invocar al procedure '''SIMULAR_PROCEDURE''' del package '''SIMULAR_PACKAGE''' debemos crear un procedure que se llame '''SIMULAR_PACKAGE.SIMULAR_PROCEDURE'''.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tsql sql=&amp;quot;sql&amp;quot;&amp;gt;CREATE procedure SIMULAR_PACKAGE.SIMULAR_PROCEDURE(&lt;br /&gt;
INOUT CODIGO VARCHAR(15), OUT DESCRIPCION)&amp;lt;/tsql&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El procedimiento para simular el package desde java es el mismo que para un procedure.&lt;br /&gt;
&lt;br /&gt;
== Funciones propias ==&lt;br /&gt;
&lt;br /&gt;
Para crear una función propia o una que existe en otras bases y en Deby no, se puede crear una clase java que exponga un método con la funcionalidad requerida y crear una función en Derby apuntando al método de la clase java.&lt;br /&gt;
&lt;br /&gt;
En este ejemplo se agrega la función &amp;quot;REPLACE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public final class ReplaceDerby {&lt;br /&gt;
&lt;br /&gt;
    public static String replace(final String str, final String target,&lt;br /&gt;
            final String replacement) {&lt;br /&gt;
        return str.replace(target, replacement);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Una vez creada la clase se debe generar una libreria &amp;quot;customDerbyReplace.jar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tsql sql=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CALL SQLJ.INSTALL_JAR('d:\customDerbyReplace.jar', 'CUSTOMFUNCTIONS.Replace', 0);&lt;br /&gt;
&amp;lt;/tsql&amp;gt;&lt;br /&gt;
Mediante esta llamada se registrar la librería en la base de datos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tsql sql=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath', 'CUSTOMFUNCTIONS.Replace');&lt;br /&gt;
&amp;lt;/tsql&amp;gt;&lt;br /&gt;
Mediante esta llamada se indica que se agregue la librería al classpath para poder ser utilizada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tsql sql=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE FUNCTION REPLACE(str VARCHAR(50), target VARCHAR(50), replacement VARCHAR(50)) &lt;br /&gt;
RETURNS VARCHAR(50) &lt;br /&gt;
PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'com.parivero.derby.ReplaceDerby.replace' ;&lt;br /&gt;
&amp;lt;/tsql&amp;gt;&lt;br /&gt;
Por último se crea la función con la referencia al método de nuestra clase.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos utilizar la función &amp;quot;REPLACE&amp;quot; en nuestro código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tsql sql=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
select replace(columna1,'bb','xx') from TABLA;&lt;br /&gt;
&amp;lt;/tsql&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
*[http://db.apache.org/derby/ Página oficial de Apache Derby] &lt;br /&gt;
*[http://db.apache.org/derby/quick_start.html Guía de inicio rápido]&lt;br /&gt;
&lt;br /&gt;
[[Category:Base_De_Datos]] [[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Apache_Derby&amp;diff=6864</id>
		<title>Apache Derby</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Apache_Derby&amp;diff=6864"/>
				<updated>2013-07-30T15:38:46Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Package en Derby */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Apache_Derby]] es una [[Base De Datos]] relacional de [[Software Libre]], implementada completamente en [[Java]]. &lt;br /&gt;
&lt;br /&gt;
== Características ==&lt;br /&gt;
&lt;br /&gt;
*Derby es muy liviano - cerca de 2 MB para el motor de la base y el driver JDBC embebido. &lt;br /&gt;
*Derby está basado en [[Java]], JDBC y estándares SQL. &lt;br /&gt;
*Derby provee un driver JDBC que permite embeber a Derby en cualquier solución Java. &lt;br /&gt;
*Derby también soporta el modo cliente/servidor. &lt;br /&gt;
*Derby es facil de instalar, desplegar y usar.&lt;br /&gt;
&lt;br /&gt;
Al ser una base de datos muy liviana es ideal para usarla en test unitarios. &lt;br /&gt;
&lt;br /&gt;
== Store Procedures en Derby ==&lt;br /&gt;
&lt;br /&gt;
Derby una de las pocas bases de datos de este estilo que nos permite usar Store Procedures con mas de un parámetro de output. De esta manera, es posible utilizar Derby para simular el compartamiento de Store Procedures en bases más complejas. &lt;br /&gt;
&lt;br /&gt;
=== Ejemplo  ===&lt;br /&gt;
&lt;br /&gt;
En Derby un Store Procedure es en realidad un objeto que llama a una clase java (externa a la base de datos). &lt;br /&gt;
&lt;br /&gt;
Si por ejemplo tenemos que probar el llamado a un store procedure de [[Oracle]], para realizar la [[Prueba Unitaria]], crearemos en [[Java]] una clase que simule el comportamiento del store procedure en [[Oracle]]: ante determinados parametros de entrada, debera devolver parametros de salida válidos. &lt;br /&gt;
&lt;br /&gt;
Los parametros de salida (OUT) y los parametros de entrada y salida (IN OUT) del procedure tienen que ser del tipo array en el metodo java. &lt;br /&gt;
&lt;br /&gt;
==== El Store Procedure en Derby  ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 package com.dosideas.derby;&lt;br /&gt;
 import java.sql.*;&lt;br /&gt;
 public class DerbyProcedures {&lt;br /&gt;
      public static void simuloComportamientoStore(int codigo, int[] codError, String[] desError)&lt;br /&gt;
      {&lt;br /&gt;
            if (codigo == 1) &lt;br /&gt;
            { &lt;br /&gt;
                  codError[0]=-1;&lt;br /&gt;
                  desError[0]=&amp;quot;Error 1&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            if (codigo == 2) &lt;br /&gt;
            { &lt;br /&gt;
                  codError[0]=-2;&lt;br /&gt;
                  desError[0]=&amp;quot;Error 2&amp;quot;;&lt;br /&gt;
            };&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== La ejecución  ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 package com.dosideas.derby;&lt;br /&gt;
 import java.sql.*;&lt;br /&gt;
 public class Prueba {&lt;br /&gt;
 &lt;br /&gt;
      public static void main(String[] args) {&lt;br /&gt;
          try {         &lt;br /&gt;
            //Creamos la conexión a Derby&lt;br /&gt;
            Connection conn  = DriverManager.getConnection(&amp;quot;jdbc:derby:TestDB;create=true&amp;quot;);&lt;br /&gt;
         &lt;br /&gt;
&lt;br /&gt;
            //Creamos el Store Procedure en Derby&lt;br /&gt;
            stmt = conn.createStatement();&lt;br /&gt;
            stmt.execute(&amp;quot;create procedure simuloComportamientoStore&amp;quot;+&lt;br /&gt;
                         &amp;quot;(IN codigo INTEGER, &amp;quot; +&lt;br /&gt;
                         &amp;quot; OUT codError INTEGER, OUT desError VARCHAR(500)) &amp;quot; +&lt;br /&gt;
                         &amp;quot; parameter style java language java external name &amp;quot; +&lt;br /&gt;
                         &amp;quot; 'com.dosideas.derby.DerbyProcedures.simuloComportamientoStore'&amp;quot;);&lt;br /&gt;
            stmt.close();&lt;br /&gt;
&lt;br /&gt;
          &lt;br /&gt;
            //Invocamos al Store Procedure&lt;br /&gt;
            int codigo = 2;&lt;br /&gt;
            CallableStatement cstmt = conn.prepareCall(&amp;quot;call simuloComportamientoStore(?,?,?)&amp;quot;);&lt;br /&gt;
            cstmt.setInt(1, codigo);&lt;br /&gt;
            cstmt.registerOutParameter(2, Types.INTEGER);&lt;br /&gt;
            cstmt.registerOutParameter(3, Types.VARCHAR);  &lt;br /&gt;
            cstmt.execute();&lt;br /&gt;
 &lt;br /&gt;
            int cod = cstmt.getInt(2);&lt;br /&gt;
            String des = cstmt.getString(3);&lt;br /&gt;
            cstmt.close();&lt;br /&gt;
 &lt;br /&gt;
            conn.close();&lt;br /&gt;
 &lt;br /&gt;
            //Mostramos el resultado&lt;br /&gt;
            System.out.println(&amp;quot;Resultado --&amp;gt; &amp;quot; + String.valueOf(cod)+&amp;quot; &amp;quot;+des);&lt;br /&gt;
 &lt;br /&gt;
            //Eliminamos el Store Procedure&lt;br /&gt;
            Statement stmt = conn.createStatement();&lt;br /&gt;
            stmt.execute(&amp;quot;drop procedure simuloComportamientoStore&amp;quot;);&lt;br /&gt;
            stmt.close();&lt;br /&gt;
          } &lt;br /&gt;
          catch (SQLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Package en Derby  ==&lt;br /&gt;
&lt;br /&gt;
Para simular un package en Derby se tiene que crear un procedure que simule ser un package. Por ejemplo, si nosotros necesitamos invocar al procedure '''SIMULAR_PROCEDURE''' del package '''SIMULAR_PACKAGE''' debemos crear un procedure que se llame '''SIMULAR_PACKAGE.SIMULAR_PROCEDURE'''.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tsql sql=&amp;quot;sql&amp;quot;&amp;gt;CREATE procedure SIMULAR_PACKAGE.SIMULAR_PROCEDURE(&lt;br /&gt;
INOUT CODIGO VARCHAR(15), OUT DESCRIPCION)&amp;lt;/tsql&amp;gt; &lt;br /&gt;
&lt;br /&gt;
El procedimiento para simular el package desde java es el mismo que para un procedure.&lt;br /&gt;
&lt;br /&gt;
== Funciones propias ==&lt;br /&gt;
&lt;br /&gt;
Para crear una función propia o una que existe en otras bases y en Deby no, se puede crear una clase java que exponga un método con la funcionalidad requerida y crear una función en Derby apuntando al método de la clase java.&lt;br /&gt;
&lt;br /&gt;
En este ejemplo se agrega la función &amp;quot;REPLACE&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
public final class ReplaceDerby {&lt;br /&gt;
&lt;br /&gt;
    public static String replace(final String str, final String target,&lt;br /&gt;
            final String replacement) {&lt;br /&gt;
        return str.replace(target, replacement);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Una vez creada la clase se debe generar una libreria &amp;quot;customDerbyReplace.jar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tsql sql=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CALL SQLJ.INSTALL_JAR('d:\customDerbyReplace.jar', 'CUSTOMFUNCTIONS.Replace', 0)&lt;br /&gt;
&amp;lt;/tsql&amp;gt;&lt;br /&gt;
Mediante esta llamada se registrar la librería en la base de datos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tsql sql=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath', 'CUSTOMFUNCTIONS.Replace');&lt;br /&gt;
&amp;lt;/tsql&amp;gt;&lt;br /&gt;
Mediante esta llamada se indica que se agregue la librería al classpath para poder ser utilizada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tsql sql=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE FUNCTION REPLACE(str VARCHAR(50), target VARCHAR(50), replacement VARCHAR(50)) &lt;br /&gt;
RETURNS VARCHAR(50) &lt;br /&gt;
PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'com.parivero.derby.ReplaceDerby.replace' &lt;br /&gt;
&amp;lt;/tsql&amp;gt;&lt;br /&gt;
Por último se crea la función con la referencia al método de nuestra clase.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos utilizar la función &amp;quot;REPLACE&amp;quot; en nuestro código.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tsql sql=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
select replace(columna1,'bb','xx') from TABLA&lt;br /&gt;
&amp;lt;/tsql&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
&lt;br /&gt;
*[http://db.apache.org/derby/ Página oficial de Apache Derby] &lt;br /&gt;
*[http://db.apache.org/derby/quick_start.html Guía de inicio rápido]&lt;br /&gt;
&lt;br /&gt;
[[Category:Base_De_Datos]] [[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6842</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6842"/>
				<updated>2013-07-18T17:46:31Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query en Liferay]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6840</id>
		<title>Dynamic Query en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6840"/>
				<updated>2013-07-18T17:46:11Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: Dynamic Query trasladada a Dynamic Query en Liferay&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liferay, a partir de la versión 5.1, proporcionar acceso a la API de consulta dinámica de Hibernate. Esto permite realizar consultas complejas sobre las estructuras o lista dinámicas que existan en el portal.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Query + Velocity ==&lt;br /&gt;
En este ejemplo se muestra como implementar las consultas dinámicas en un Template de una [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/creating-data-lists Lista dinámica]. La consulta obtiene los 20 primeros registros del usuario registrado ordenados de forma descendentepor fecha de modificación.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## Obtiene el userId.&lt;br /&gt;
#set($userId = $request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;user-id&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el servicio para ejecutar las consultas dinamicas.&lt;br /&gt;
#set ($ddlLocalService = $serviceLocator.findService('com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService'))&lt;br /&gt;
&lt;br /&gt;
##Obtiene el id de la lista.&lt;br /&gt;
#set ($recordSetId = $getterUtil.getLong($reserved_record_set_id.data, 0))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el tipo de respuesta para la consulta dinamica.&lt;br /&gt;
#set ($DDLrecordClass = $portal.getClass().forName(&amp;quot;com.liferay.portlet.dynamicdatalists.model.DDLRecord&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
##Utilidad para armar consultas dinamicas.&lt;br /&gt;
#set ($dqfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Utilidad para agregar ordenamiento a la consulta dinamica.&lt;br /&gt;
#set ($ofu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.OrderFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Restricciones&lt;br /&gt;
#set ($rfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Query&lt;br /&gt;
#set ($q = $dqfu.forClass($DDLrecordClass))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;recordSetId&amp;quot;, $getterUtil.getLong($recordSetId))))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;userId&amp;quot;, $getterUtil.getLong($userId))))  &lt;br /&gt;
#set ($V = $q.addOrder($ofu.desc(&amp;quot;modifiedDate&amp;quot;)))  &lt;br /&gt;
#set ($records = $ddlLocalService.dynamicQuery($q,0,20))  &lt;br /&gt;
&lt;br /&gt;
#foreach($record in $records)&lt;br /&gt;
    #set ($titulo = $record.getField(&amp;quot;Titulo&amp;quot;).getValue())&lt;br /&gt;
    #set ($link = $record.getField(&amp;quot;Link&amp;quot;).getValue())&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;$link&amp;quot;&amp;gt;$titulo&amp;lt;/a&amp;gt; &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver Tambien ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/Queries+2%3A+DynamicQuery+API Wiki Liferay]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Dynamic_Query&amp;diff=6841</id>
		<title>Dynamic Query</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Dynamic_Query&amp;diff=6841"/>
				<updated>2013-07-18T17:46:11Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: Dynamic Query trasladada a Dynamic Query en Liferay&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECCIÓN [[Dynamic Query en Liferay]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6839</id>
		<title>Dynamic Query en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6839"/>
				<updated>2013-07-18T17:43:13Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Dynamic Query + Velocity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liferay, a partir de la versión 5.1, proporcionar acceso a la API de consulta dinámica de Hibernate. Esto permite realizar consultas complejas sobre las estructuras o lista dinámicas que existan en el portal.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Query + Velocity ==&lt;br /&gt;
En este ejemplo se muestra como implementar las consultas dinámicas en un Template de una [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/creating-data-lists Lista dinámica]. La consulta obtiene los 20 primeros registros del usuario registrado ordenados de forma descendentepor fecha de modificación.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## Obtiene el userId.&lt;br /&gt;
#set($userId = $request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;user-id&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el servicio para ejecutar las consultas dinamicas.&lt;br /&gt;
#set ($ddlLocalService = $serviceLocator.findService('com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService'))&lt;br /&gt;
&lt;br /&gt;
##Obtiene el id de la lista.&lt;br /&gt;
#set ($recordSetId = $getterUtil.getLong($reserved_record_set_id.data, 0))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el tipo de respuesta para la consulta dinamica.&lt;br /&gt;
#set ($DDLrecordClass = $portal.getClass().forName(&amp;quot;com.liferay.portlet.dynamicdatalists.model.DDLRecord&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
##Utilidad para armar consultas dinamicas.&lt;br /&gt;
#set ($dqfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Utilidad para agregar ordenamiento a la consulta dinamica.&lt;br /&gt;
#set ($ofu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.OrderFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Restricciones&lt;br /&gt;
#set ($rfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Query&lt;br /&gt;
#set ($q = $dqfu.forClass($DDLrecordClass))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;recordSetId&amp;quot;, $getterUtil.getLong($recordSetId))))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;userId&amp;quot;, $getterUtil.getLong($userId))))  &lt;br /&gt;
#set ($V = $q.addOrder($ofu.desc(&amp;quot;modifiedDate&amp;quot;)))  &lt;br /&gt;
#set ($records = $ddlLocalService.dynamicQuery($q,0,20))  &lt;br /&gt;
&lt;br /&gt;
#foreach($record in $records)&lt;br /&gt;
    #set ($titulo = $record.getField(&amp;quot;Titulo&amp;quot;).getValue())&lt;br /&gt;
    #set ($link = $record.getField(&amp;quot;Link&amp;quot;).getValue())&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;$link&amp;quot;&amp;gt;$titulo&amp;lt;/a&amp;gt; &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ver Tambien ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/Queries+2%3A+DynamicQuery+API Wiki Liferay]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6838</id>
		<title>Dynamic Query en Liferay</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Dynamic_Query_en_Liferay&amp;diff=6838"/>
				<updated>2013-07-18T17:41:27Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: Página creada con 'Liferay, a partir de la versión 5.1, proporcionar acceso a la API de consulta dinámica de Hibernate. Esto permite realizar consultas complejas sobre las estructuras o lista di…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Liferay, a partir de la versión 5.1, proporcionar acceso a la API de consulta dinámica de Hibernate. Esto permite realizar consultas complejas sobre las estructuras o lista dinámicas que existan en el portal.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Query + Velocity ==&lt;br /&gt;
En este ejemplo se muestra como implementar las consultas dinámicas en un Template de una [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/creating-data-lists Lista dinámica]. La consulta obtiene los 20 primeros registros del usuario registrado ordenados por fecha.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
## Obtiene el userId.&lt;br /&gt;
#set($userId = $request.get(&amp;quot;theme-display&amp;quot;).get(&amp;quot;user-id&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el servicio para ejecutar las consultas dinamicas.&lt;br /&gt;
#set ($ddlLocalService = $serviceLocator.findService('com.liferay.portlet.dynamicdatalists.service.DDLRecordLocalService'))&lt;br /&gt;
&lt;br /&gt;
##Obtiene el id de la lista.&lt;br /&gt;
#set ($recordSetId = $getterUtil.getLong($reserved_record_set_id.data, 0))&lt;br /&gt;
&lt;br /&gt;
## Obtiene el tipo de respuesta para la consulta dinamica.&lt;br /&gt;
#set ($DDLrecordClass = $portal.getClass().forName(&amp;quot;com.liferay.portlet.dynamicdatalists.model.DDLRecord&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
##Utilidad para armar consultas dinamicas.&lt;br /&gt;
#set ($dqfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Utilidad para agregar ordenamiento a la consulta dinamica.&lt;br /&gt;
#set ($ofu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.OrderFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Restricciones&lt;br /&gt;
#set ($rfu = $portal.getClass().forName(&amp;quot;com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil&amp;quot;))  &lt;br /&gt;
&lt;br /&gt;
##Query&lt;br /&gt;
#set ($q = $dqfu.forClass($DDLrecordClass))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;recordSetId&amp;quot;, $getterUtil.getLong($recordSetId))))  &lt;br /&gt;
#set ($V = $q.add($rfu.eq(&amp;quot;userId&amp;quot;, $getterUtil.getLong($userId))))  &lt;br /&gt;
#set ($V = $q.addOrder($ofu.asc(&amp;quot;modifiedDate&amp;quot;)))  &lt;br /&gt;
#set ($records = $ddlLocalService.dynamicQuery($q,0,20))  &lt;br /&gt;
&lt;br /&gt;
#foreach($record in $records)&lt;br /&gt;
    #set ($titulo = $record.getField(&amp;quot;Titulo&amp;quot;).getValue())&lt;br /&gt;
    #set ($link = $record.getField(&amp;quot;Link&amp;quot;).getValue())&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;a href=&amp;quot;$link&amp;quot;&amp;gt;$titulo&amp;lt;/a&amp;gt; &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ver Tambien ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.liferay.com/es/community/wiki/-/wiki/Main/Queries+2%3A+DynamicQuery+API Wiki Liferay]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6837</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6837"/>
				<updated>2013-07-18T17:21:40Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
* [[Dynamic Query]]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6836</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6836"/>
				<updated>2013-07-18T17:21:26Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Componentes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6835</id>
		<title>Liferay Portal</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Liferay_Portal&amp;diff=6835"/>
				<updated>2013-07-18T17:10:02Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Componentes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Portlet]]&lt;br /&gt;
Liferay Portal es un [[Administrador De Contenidos]] de [[Software Libre]] basado en Java, que cumple con la [[Portlet Specification Api]].&lt;br /&gt;
&lt;br /&gt;
Entre las características principales se destacan:&lt;br /&gt;
* Administrador de contenidos (CMS) y una Suite de colaboración&lt;br /&gt;
* Varios porlets integrados listos para usar&lt;br /&gt;
* Herramientas de desarrollo&lt;br /&gt;
* Traducción a 22 idiomas&lt;br /&gt;
* Funciona con los principales [[Servidor de Aplicaciones]], bases de datos y sistemas operativos.&lt;br /&gt;
&lt;br /&gt;
== Conceptos de estilos y disposición ==&lt;br /&gt;
=== Tema (Theme) ===&lt;br /&gt;
Vamos a ver los conceptos de Tema (Theme), Disposición (Layout).&lt;br /&gt;
&lt;br /&gt;
Un '''Tema (o Theme)''' es el encargado de renderizar la página en su totalidad, e incluye los aspectos visuales generales del sitio. Un Tema incluye los JavaScript generales, los CSS, y seguramente también el logo del sitio, el menú general, el pie de página, etc. El Tema define un área donde se ubicará el contenido. &lt;br /&gt;
&lt;br /&gt;
Al crear un Tema en realidad se suele &amp;quot;heredar&amp;quot; de algún tema ya existente. Liferay trae 2 temas ya preparados para heredar: &amp;quot;_styled&amp;quot; (del que suele heredarse) y &amp;quot;_unstyled&amp;quot; (que es aún más básico). Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/html/themes&lt;br /&gt;
&lt;br /&gt;
=== Disposición (layout) ===&lt;br /&gt;
Un Tema declara un área donde se ubicará el contenido. Este área de contenido puede tener distintas disposiciones (2 columnas, 3 columnas, etc.); esta disposición se conoce como Layout. Cada página en Liferay puede tener un Layout asociado. &lt;br /&gt;
&lt;br /&gt;
Liferay ya trae varios Layouts comunes declarados, y pueden crearse nuevos. Se puede consultar el código de estos temas en &amp;lt;LIFERAY_WEBAPP&amp;gt;/layouttpl&lt;br /&gt;
&lt;br /&gt;
== Conceptos de gestión de contenidos ==&lt;br /&gt;
Liferay permite manejar dos grandes conceptos para gestionar el contenido de una página:&lt;br /&gt;
* Estructuras&lt;br /&gt;
* Listas dinámicas&lt;br /&gt;
&lt;br /&gt;
=== Estructuras ===&lt;br /&gt;
Se pueden crear estructuras de datos para que el usuario complete y pueda cambiar facilmente contenido de la página sin tocar HTML. Una estructura tiene asociado una Plantilla (Template) que indica cómo se renderiza el contenido de una Estructura. &lt;br /&gt;
&lt;br /&gt;
Por ejemplo, puede crearse una estructura Promocion, que contenga un título y una imagen. Luego, se puede crear una Plantilla para la estructura Promoción que renderiza dicha estructura mostrando la imagen y el título debajo. &lt;br /&gt;
&lt;br /&gt;
Al usuario final le quedan entonces 2 pasos para completar: &lt;br /&gt;
1. Instanciar la estructura para agregarle datos. &lt;br /&gt;
2. Ubicar la estructura instanciada en alguna posición de la página.&lt;br /&gt;
&lt;br /&gt;
Las estructuras, plantillas y instancias de estructras se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Web Content.&lt;br /&gt;
&lt;br /&gt;
=== Listas dinámicas ===&lt;br /&gt;
Se pueden crear listas de contenido variable, para que el usuario agregue como si de una lista se tratara. Las listas son de un tipo de dato en particular (el cual se configura al igual que una estructura), y se les asocia una plantilla para renderizar la lista (y opcionalmente, una plantilla para renderizar el formulario de ingreso de un dato de la lista). &lt;br /&gt;
&lt;br /&gt;
Las listas dinámicas se gestionan desde el Control Panel &amp;gt; Site &amp;gt; Dynamic Data Lists&lt;br /&gt;
&lt;br /&gt;
Leer más sobre [http://www.liferay.com/es/documentation/liferay-portal/6.1/user-guide/-/ai/make-it-pretty-creating-custom-displays Crear y estilar listas dinámicas en Liferay].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [http://www.liferay.com Web oficial de Liferay Portal]&lt;br /&gt;
* [http://wiki.liferay.com/index.php/Main_Page Wiki oficial de Liferay ]&lt;br /&gt;
&lt;br /&gt;
== Componentes ==&lt;br /&gt;
* [[Carrusel con limite en Liferay]]&lt;br /&gt;
* [[Dynamic Query]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Springockito&amp;diff=6767</id>
		<title>Springockito</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Springockito&amp;diff=6767"/>
				<updated>2013-03-05T18:31:51Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Extensión de Spring para simplificar la creación de mocks en los test. Ofrece la posibilidad de realizar la creación de los mocks mediante los xml de Spring o mediante anotaciones en el mismo test.&lt;br /&gt;
&lt;br /&gt;
===Ejemplo con anotaciones===&lt;br /&gt;
Agregar la siguiente dependencia en el pom.xm del proyecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;dependencies&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
     &amp;lt;dependency&amp;gt;&lt;br /&gt;
       &amp;lt;groupId&amp;gt;org.kubek2k&amp;lt;/groupId&amp;gt;&lt;br /&gt;
       &amp;lt;artifactId&amp;gt;springockito-annotations&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
       &amp;lt;version&amp;gt;1.0.8&amp;lt;/version&amp;gt;&lt;br /&gt;
       &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;
     &amp;lt;/dependency&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
&amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el ejemplo se prueba el método &amp;quot;talk&amp;quot; de la clase &amp;quot;VoiceService&amp;quot;, el cual debe ejecutar una o dos veces el método &amp;quot;play&amp;quot; de la clase &amp;quot;Audio&amp;quot;. Esta ultima es la clase que mockeamos para verificar las ejecuciones de su métodos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(SpringJUnit4ClassRunner.class)&lt;br /&gt;
@ContextConfiguration(loader = SpringockitoContextLoader.class,&lt;br /&gt;
        locations = {&amp;quot;classpath:spring/jenkins-speech-integration-test.xml&amp;quot;})&lt;br /&gt;
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)&lt;br /&gt;
public class VoiceServiceTest {&lt;br /&gt;
&lt;br /&gt;
    @Autowired&lt;br /&gt;
    private VoiceService instance;&lt;br /&gt;
    &lt;br /&gt;
    @ReplaceWithMock&lt;br /&gt;
    @Autowired&lt;br /&gt;
    private Audio audio;&lt;br /&gt;
&lt;br /&gt;
    @Test&lt;br /&gt;
    public void talk_messageWithPreSound_executePlayMethodTwoTimes() throws Exception {&lt;br /&gt;
        String message = &amp;quot;Hola&amp;quot;;&lt;br /&gt;
        instance.talk(message);&lt;br /&gt;
        verify(audio, times(2)).play((InputStream) any());&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Test&lt;br /&gt;
    public void talk_messageWithoutPreSound_executePlayMethodOneTimes() throws Exception {&lt;br /&gt;
        instance.setPreSound(&amp;quot;&amp;quot;);&lt;br /&gt;
        String message = &amp;quot;Hola&amp;quot;;&lt;br /&gt;
        instance.talk(message);&lt;br /&gt;
        verify(audio, times(1)).play((InputStream) any());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el atributo “loader” de la anotación “ContextConfiguration” hay que setear la clase “SpringockitoContextLoader” de Springockito, esta clase es la encargada de realizar las sustituciones de las clases reales por los mocks.&lt;br /&gt;
&lt;br /&gt;
==Ver También==&lt;br /&gt;
*[https://bitbucket.org/kubek2k/springockito/wiki/Home Sitio Oficial de springockito]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:TDD]]&lt;br /&gt;
[[Category:Spring Framework]]&lt;br /&gt;
[[Category:JUnit]]&lt;br /&gt;
[[Category:Mockito]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Springockito&amp;diff=6766</id>
		<title>Springockito</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Springockito&amp;diff=6766"/>
				<updated>2013-03-05T18:31:05Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ejemplo con anotaciones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Extensión de Spring para simplificar la creación de mocks en los test. Ofrece la posibilidad de realizar la creación de los mocks mediante los xml de Spring o mediante anotaciones en el mismo test.&lt;br /&gt;
&lt;br /&gt;
Extensión de Spring para simplificar la creación de mocks en los test. Ofrece la posibilidad de realizar la creación de los mocks mediante los xml de Spring o mediante anotaciones en el mismo test.&lt;br /&gt;
&lt;br /&gt;
===Ejemplo con anotaciones===&lt;br /&gt;
Agregar la siguiente dependencia en el pom.xm del proyecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;dependencies&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
     &amp;lt;dependency&amp;gt;&lt;br /&gt;
       &amp;lt;groupId&amp;gt;org.kubek2k&amp;lt;/groupId&amp;gt;&lt;br /&gt;
       &amp;lt;artifactId&amp;gt;springockito-annotations&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
       &amp;lt;version&amp;gt;1.0.8&amp;lt;/version&amp;gt;&lt;br /&gt;
       &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;
     &amp;lt;/dependency&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
&amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el ejemplo se prueba el método &amp;quot;talk&amp;quot; de la clase &amp;quot;VoiceService&amp;quot;, el cual debe ejecutar una o dos veces el método &amp;quot;play&amp;quot; de la clase &amp;quot;Audio&amp;quot;. Esta ultima es la clase que mockeamos para verificar las ejecuciones de su métodos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(SpringJUnit4ClassRunner.class)&lt;br /&gt;
@ContextConfiguration(loader = SpringockitoContextLoader.class,&lt;br /&gt;
        locations = {&amp;quot;classpath:spring/jenkins-speech-integration-test.xml&amp;quot;})&lt;br /&gt;
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)&lt;br /&gt;
public class VoiceServiceTest {&lt;br /&gt;
&lt;br /&gt;
    @Autowired&lt;br /&gt;
    private VoiceService instance;&lt;br /&gt;
    &lt;br /&gt;
    @ReplaceWithMock&lt;br /&gt;
    @Autowired&lt;br /&gt;
    private Audio audio;&lt;br /&gt;
&lt;br /&gt;
    @Test&lt;br /&gt;
    public void talk_messageWithPreSound_executePlayMethodTwoTimes() throws Exception {&lt;br /&gt;
        String message = &amp;quot;Hola&amp;quot;;&lt;br /&gt;
        instance.talk(message);&lt;br /&gt;
        verify(audio, times(2)).play((InputStream) any());&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Test&lt;br /&gt;
    public void talk_messageWithoutPreSound_executePlayMethodOneTimes() throws Exception {&lt;br /&gt;
        instance.setPreSound(&amp;quot;&amp;quot;);&lt;br /&gt;
        String message = &amp;quot;Hola&amp;quot;;&lt;br /&gt;
        instance.talk(message);&lt;br /&gt;
        verify(audio, times(1)).play((InputStream) any());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el atributo “loader” de la anotación “ContextConfiguration” hay que setear la clase “SpringockitoContextLoader” de Springockito, esta clase es la encargada de realizar las sustituciones de las clases reales por los mocks.&lt;br /&gt;
&lt;br /&gt;
==Ver También==&lt;br /&gt;
*[https://bitbucket.org/kubek2k/springockito/wiki/Home Sitio Oficial de springockito]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:TDD]]&lt;br /&gt;
[[Category:Spring Framework]]&lt;br /&gt;
[[Category:JUnit]]&lt;br /&gt;
[[Category:Mockito]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Springockito&amp;diff=6765</id>
		<title>Springockito</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Springockito&amp;diff=6765"/>
				<updated>2013-03-05T18:15:05Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: Página creada con 'Extensión de Spring para simplificar la creación de mocks en los test. Ofrece la posibilidad de realizar la creación de los mocks mediante los xml de Spring o mediante anotac…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Extensión de Spring para simplificar la creación de mocks en los test. Ofrece la posibilidad de realizar la creación de los mocks mediante los xml de Spring o mediante anotaciones en el mismo test.&lt;br /&gt;
&lt;br /&gt;
===Ejemplo con anotaciones===&lt;br /&gt;
Agregar la siguiente dependencia en el pom.xm del proyecto.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;dependencies&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
     &amp;lt;dependency&amp;gt;&lt;br /&gt;
       &amp;lt;groupId&amp;gt;org.kubek2k&amp;lt;/groupId&amp;gt;&lt;br /&gt;
       &amp;lt;artifactId&amp;gt;springockito-annotations&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
       &amp;lt;version&amp;gt;1.0.8&amp;lt;/version&amp;gt;&lt;br /&gt;
       &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;&lt;br /&gt;
     &amp;lt;/dependency&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
&amp;lt;/dependencies&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el atributo “loader” de la anotación “ContextConfiguration” hay que setear la clase “SpringockitoContextLoader” de Springockito, esta clase es la encargada de realizar las sustituciones de las clases reales por los mocks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(SpringJUnit4ClassRunner.class)&lt;br /&gt;
@ContextConfiguration(loader = SpringockitoContextLoader.class,&lt;br /&gt;
        locations = {&amp;quot;classpath:spring/jenkins-speech-integration-test.xml&amp;quot;})&lt;br /&gt;
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)&lt;br /&gt;
public class VoiceServiceTest {&lt;br /&gt;
&lt;br /&gt;
    @Autowired&lt;br /&gt;
    private VoiceService instance;&lt;br /&gt;
    &lt;br /&gt;
    @ReplaceWithMock&lt;br /&gt;
    @Autowired&lt;br /&gt;
    private Audio audio;&lt;br /&gt;
&lt;br /&gt;
    @Test&lt;br /&gt;
    public void talk_messageWithPreSound_executePlayMethodTwoTimes() throws Exception {&lt;br /&gt;
        String message = &amp;quot;Hola&amp;quot;;&lt;br /&gt;
        instance.talk(message);&lt;br /&gt;
        verify(audio, times(2)).play((InputStream) any());&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Test&lt;br /&gt;
    public void talk_messageWithoutPreSound_executePlayMethodOneTimes() throws Exception {&lt;br /&gt;
        instance.setPreSound(&amp;quot;&amp;quot;);&lt;br /&gt;
        String message = &amp;quot;Hola&amp;quot;;&lt;br /&gt;
        instance.talk(message);&lt;br /&gt;
        verify(audio, times(1)).play((InputStream) any());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ver También==&lt;br /&gt;
*[https://bitbucket.org/kubek2k/springockito/wiki/Home Sitio Oficial de springockito]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:TDD]]&lt;br /&gt;
[[Category:Spring Framework]]&lt;br /&gt;
[[Category:JUnit]]&lt;br /&gt;
[[Category:Mockito]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Spring_Test&amp;diff=6764</id>
		<title>Spring Test</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Spring_Test&amp;diff=6764"/>
				<updated>2013-03-05T18:09:41Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Spring Framework]]&lt;br /&gt;
[[Category:JUnit]]&lt;br /&gt;
[[Spring Framework]] contiene un conjunto de clases pensadas para realizar [[Prueba Unitaria]] y [[Prueba De Integracion]], facilitando varias tareas repetitivas. En particular, estas utilidades se integran directamente con [[JUnit]].&lt;br /&gt;
&lt;br /&gt;
Spring Test provee:&lt;br /&gt;
* integración con [[JUnit]]&lt;br /&gt;
* acceso al factory de beans directamente desde los test unitarios&lt;br /&gt;
* inyección automática de la clase bajo test en el TestCase&lt;br /&gt;
* rollback automático de transacciones contra bases de datos&lt;br /&gt;
* acceso a la conexión jdbc para realizar querys de comprobación&lt;br /&gt;
* y varias utilidades más.&lt;br /&gt;
&lt;br /&gt;
El uso general de [[Spring Test]] implica escribir casos de prueba de [[JUnit]] que hereden de clases abstractas de Spring Test.&lt;br /&gt;
&lt;br /&gt;
==JUnit 3.x==&lt;br /&gt;
&lt;br /&gt;
'''El soporte para JUnit 3.x está obsoleto a partir de Spring Framework 3.0'''.&lt;br /&gt;
&lt;br /&gt;
====La clase AbstractDependencyInjectionSpringContextTests====&lt;br /&gt;
La clase AbstractDependencyInjectionSpringContextTests provee a los tests que heredan acceso al factory de spring. Esta es la clase más práctica para usar con Spring, a menos que se quiera manejo de transacciones (ver a continuación).&lt;br /&gt;
&lt;br /&gt;
Al heredar de esta clase se debe sobreescribir el método ''getConfigLocations()'', el cual devuelve los XML de Spring a cargar. Luego, en los tests, es posible utilizar el objeto ''applicationContext'' que viene heredado, y del cual podremos obtener los objetos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
 public class InvasorBoTest extends AbstractDependencyInjectionSpringContextTests {&lt;br /&gt;
&lt;br /&gt;
     private InvasorBo invasorBo;&lt;br /&gt;
&lt;br /&gt;
     @Override&lt;br /&gt;
     protected String[] getConfigLocations() {&lt;br /&gt;
         return new String[] { &amp;quot;classpath:application-db.xml&amp;quot;,&lt;br /&gt;
                               &amp;quot;classpath:application-bo.xml&amp;quot;};&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     @Override&lt;br /&gt;
     public void onSetUp() {&lt;br /&gt;
         invasorBo = (InvasorBo) applicationContext.getBean(&amp;quot;business.InvasorBo&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     /** Busca un invasor por su identificador unico */&lt;br /&gt;
     public void testBuscar() {&lt;br /&gt;
         System.out.println(&amp;quot;testBuscar&amp;quot;);&lt;br /&gt;
         String idInvasor = 100;&lt;br /&gt;
 &lt;br /&gt;
         Invasor invasor = invasorBo.buscar(idInvasor);&lt;br /&gt;
         assertNotNull(invasor);&lt;br /&gt;
         assertEquals(idInvasor, invasor.getId());&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====La clase AbstractTransactionalDataSourceSpringContextTests====&lt;br /&gt;
La clase AbstractTransactionalDataSourceSpringContextTests provee a los tests que hereden acceso al factory de spring, y rollback automático de las transacciones.&lt;br /&gt;
&lt;br /&gt;
Esta clase es muy útil para testear [[DAO]] o cualquier otro objeto que modifique datos en una [[Base De Datos]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
 public class InvasorDaoTest extends AbstractTransactionalDataSourceSpringContextTests {&lt;br /&gt;
 &lt;br /&gt;
     private InvasorDao invasorDao;&lt;br /&gt;
 &lt;br /&gt;
     @Override&lt;br /&gt;
     protected String[] getConfigLocations() {&lt;br /&gt;
         return new String[] { &amp;quot;classpath:application-db.xml&amp;quot;,&lt;br /&gt;
                               &amp;quot;classpath:application-hibernate.xml&amp;quot;,&lt;br /&gt;
                               &amp;quot;classpath:application-dao.xml&amp;quot;};&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     @Override&lt;br /&gt;
     public void onSetUp() {&lt;br /&gt;
         invasorDao = (InvasorDao) applicationContext.getBean(&amp;quot;dao.InvasorDao&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     /** Inserta una fila en una tabla */&lt;br /&gt;
     public void testGuardar() {&lt;br /&gt;
         System.out.println(&amp;quot;testGuardar&amp;quot;);&lt;br /&gt;
         int cantOriginal = countRowsInTable(&amp;quot;INVASORES&amp;quot;);&lt;br /&gt;
         Invasor invasor = new Invasor();&lt;br /&gt;
         invasor.setNombre(&amp;quot;Zim&amp;quot;);&lt;br /&gt;
         invasor.setOrden(&amp;quot;Invadir la Tierra&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
         invasorDao.guardar(invasor);&lt;br /&gt;
 &lt;br /&gt;
         int cantInsert = countRowsInTable(&amp;quot;INVASORES&amp;quot;);&lt;br /&gt;
         assertEquals(cantOriginal + 1, cantInsert);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Explicación====&lt;br /&gt;
&lt;br /&gt;
El método ''getConfigLocations()'' devuelve la lista de archivos de configuración. Obviamente, lo recomendable es crear una superclase que sobreescriba dicho método, y todos los tests heredarlos de dicha clase.&lt;br /&gt;
&lt;br /&gt;
El método ''countRowsInTable()'' es uno de los métodos heredados utilitarios que tiene la aplicación (cuenta la cantidad de filas de una tabla). A su vez, a través del atributo jdbcTemplate (también heredado) es posible realizar consultas en la misma transacción.&lt;br /&gt;
&lt;br /&gt;
Más aún, es posible forzar el commit de la transacción si así se deseara.&lt;br /&gt;
&lt;br /&gt;
==JUnit 4.x==&lt;br /&gt;
Spring Framework 2.5.x funciona con JUnit 4.4; Spring Framework 3.0 ya trae soporte para JUnit 4.5 y superior. &lt;br /&gt;
&lt;br /&gt;
Si se utiliza JUnit 4.x, la configuración para inyección es mucho más simple, haciendose a través de anotaciones: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(SpringJUnit4ClassRunner.class)&lt;br /&gt;
@ContextConfiguration(locations = {&lt;br /&gt;
    &amp;quot;classpath:application-db.xml&amp;quot;,&lt;br /&gt;
    &amp;quot;classpath:application-bo.xml&amp;quot;&lt;br /&gt;
})&lt;br /&gt;
public class InvasorBoTest {&lt;br /&gt;
&lt;br /&gt;
     /** La anotacion Autowired inyecta automáticamente el bean de acuerdo a su tipo */&lt;br /&gt;
     @Autowired&lt;br /&gt;
     private InvasorBo invasorBo;&lt;br /&gt;
&lt;br /&gt;
     /** Busca un invasor por su identificador unico */&lt;br /&gt;
     @Test&lt;br /&gt;
     public void buscar() {&lt;br /&gt;
         System.out.println(&amp;quot;testBuscar&amp;quot;);&lt;br /&gt;
         String idInvasor = 100;&lt;br /&gt;
 &lt;br /&gt;
         Invasor invasor = invasorBo.buscar(idInvasor);&lt;br /&gt;
         assertNotNull(invasor);&lt;br /&gt;
         assertEquals(idInvasor, invasor.getId());&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La anotación ''@RunWith(SpringJUnit4ClassRunner.class)'' hace que Spring levante su factory y prepare la ejecución. De forma alternativa se puede heredar de la clase ''AbstractJUnit4SpringContextTests''; de hacerlo, se tiene acceso al contexto de Spring y otras utilidades.&lt;br /&gt;
&lt;br /&gt;
=== Transacciones ===&lt;br /&gt;
Es posible manejar las transacciones en los tests, de manera de hacer un rollback automático de las operaciones realizadas. Para esto usamos la anotación ''@TransactionConfiguration'' y ''@Transactional''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RunWith(SpringJUnit4ClassRunner.class)&lt;br /&gt;
@ContextConfiguration(locations = {&lt;br /&gt;
    &amp;quot;classpath:application-db.xml&amp;quot;,&lt;br /&gt;
    &amp;quot;classpath:application-bo.xml&amp;quot;&lt;br /&gt;
})&lt;br /&gt;
@TransactionConfiguration(transactionManager=&amp;quot;transactionManager&amp;quot;)&lt;br /&gt;
@Transactional&lt;br /&gt;
public class InvasorBoTest {&lt;br /&gt;
&lt;br /&gt;
     /** La anotacion Autowired inyecta automáticamente el bean de acuerdo a su tipo */&lt;br /&gt;
     @Autowired&lt;br /&gt;
     private InvasorBo invasorBo;&lt;br /&gt;
&lt;br /&gt;
     /** Este test tendrá un rollback automático  */&lt;br /&gt;
     @Test&lt;br /&gt;
     public void buscar() {&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La anotación @TransactionConfiguration indica cuál es el transactionManager que utilizarán los tests y sobre el cual se hará un rollback. La anotación @Transactional hace transaccional a toda la clase de test.&lt;br /&gt;
&lt;br /&gt;
==Ver también==&lt;br /&gt;
* [[Prueba Unitaria]]&lt;br /&gt;
* [[EasyMock]]&lt;br /&gt;
* [[MockEjb]]&lt;br /&gt;
* [[Springockito]]&lt;br /&gt;
* [[Transacciones Con Spring]]&lt;br /&gt;
* [http://static.springframework.org/spring/docs/2.5.x/reference/testing.html Documentacion de  SpringTest]&lt;br /&gt;
* [http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/testing.html#testcontext-tx Transaction Management en tests]&lt;br /&gt;
&lt;br /&gt;
[[Category:TDD]]&lt;br /&gt;
[[Category:Spring Framework]]&lt;br /&gt;
[[Category:JUnit]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=REST_con_Spring_Roo&amp;diff=6557</id>
		<title>REST con Spring Roo</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=REST_con_Spring_Roo&amp;diff=6557"/>
				<updated>2012-03-28T18:49:46Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: Página creada con 'En este ejemplo se demuestra como podemos utilizar Spring Roo, para genera una aplicación web que expone servicios web [http://es.wikipedia.org/wiki/Representational_State_…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En este ejemplo se demuestra como podemos utilizar [[Spring Roo]], para genera una aplicación web que expone servicios web [http://es.wikipedia.org/wiki/Representational_State_Transfer REST].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ejemplo ==&lt;br /&gt;
Para este ejemplo utilizamos una base de datos Oracle. A continuación detallamos los comandos de [[Spring Roo]] y las modificaciones manuales que hay que realizar.&lt;br /&gt;
&lt;br /&gt;
=== Creación de la tabla persona ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code sql&amp;gt;&lt;br /&gt;
create table persona (id number(10) primary key, &lt;br /&gt;
nombre varchar2(100), edad number(2))&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insertamos algunos datos ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code sql&amp;gt;&lt;br /&gt;
insert into persona values(1,'Cacho',55);&lt;br /&gt;
 &lt;br /&gt;
insert into persona values(2,'pepe',45);&lt;br /&gt;
&lt;br /&gt;
insert into persona values(3,'Tomás',0);&lt;br /&gt;
&lt;br /&gt;
insert into persona values(4,'Josefina',2);&lt;br /&gt;
&lt;br /&gt;
commit;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Generamos el proyecto ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
project --topLevelPackage com.dosideas.personaservice --projectName persona-service --java 6 --packaging WAR&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Generamos la capa de persistencia JPA, utilizando Hibernate como ORM ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
persistence setup --provider HIBERNATE --database ORACLE --hostName hostname --userName userName --databaseName baseName --password pass&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Deshabilitamos hibernate.hbm2ddl.auto&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Comentamos la siguiente linea en el archivo persistence.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;property name=&amp;quot;hibernate.hbm2ddl.auto&amp;quot; value=&amp;quot;create&amp;quot;/&amp;gt; --&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: Como estamos utilizando Oracle, tenemos que modificar el pom de la aplicación para que Maven pueda descargar los drivers.&lt;br /&gt;
&lt;br /&gt;
Cambiar:&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;dependency&amp;gt;&lt;br /&gt;
  &amp;lt;groupId&amp;gt;com.oracle&amp;lt;/groupId&amp;gt;&lt;br /&gt;
  &amp;lt;artifactId&amp;gt;ojdbc14&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
  &amp;lt;version&amp;gt;10.2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;
&amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por:&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;dependency&amp;gt;&lt;br /&gt;
  &amp;lt;groupId&amp;gt;com.oracle&amp;lt;/groupId&amp;gt;&lt;br /&gt;
  &amp;lt;artifactId&amp;gt;ojdbc14&amp;lt;/artifactId&amp;gt;&lt;br /&gt;
  &amp;lt;version&amp;gt;10.2.0.4&amp;lt;/version&amp;gt;&lt;br /&gt;
&amp;lt;/dependency&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También hay que agregar el repositorio donde esta el driver.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code xml&amp;gt;&lt;br /&gt;
&amp;lt;repository&amp;gt;&lt;br /&gt;
  &amp;lt;id&amp;gt;mvnsearch&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;url&amp;gt;http://www.mvnsearch.org/maven2/&amp;lt;/url&amp;gt;&lt;br /&gt;
  &amp;lt;/repository&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Agregamos las librerías de Jackson para la serialización de los objetos ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
dependency add --groupId org.codehaus.jackson --artifactId jackson-jaxrs --version 1.8.4&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mapeo de la entidad y sus campos ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
entity jpa --class com.dosideas.personaservice.domain.Persona --identifierField id --identifierColumn id&lt;br /&gt;
field string --fieldName nombre&lt;br /&gt;
field number --fieldName edad --type java.lang.Long&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por defecto se agrega el campo “version”, para que este campo no se genere hay que modificar la anotación “@RooJpaActiveRecord” en la entidad Persona y agregar el parámetros “versionField” con una cadena vacía.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RooJpaActiveRecord(versionField = &amp;quot;&amp;quot;, identifierColumn = &amp;quot;id&amp;quot;, identifierField = &amp;quot;id&amp;quot;)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Agregamos soporte para JSON en las entidades ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
json all&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Agregamos soporte para JSON para Spring MVC ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
web mvc json setup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creamos el controlador que expondrá los servicios REST ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
web mvc json all --package ~.web&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilamos el proyecto ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
perform package&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desplegamos la aplicación ===&lt;br /&gt;
&lt;br /&gt;
En este caso utilizamos el plugin de jetty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
mvn jetty:run&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Servicio creados ===&lt;br /&gt;
&lt;br /&gt;
Inserta un registro en la tabla persona&lt;br /&gt;
&lt;br /&gt;
POST http://localhost:8080/persona-service/persona&lt;br /&gt;
&lt;br /&gt;
Inserta una colección de registros en la tabla persona&lt;br /&gt;
&lt;br /&gt;
POST http://localhost:8080/persona-service/persona/jsonArray&lt;br /&gt;
&lt;br /&gt;
Obtiene todos los registros de la tabla persona&lt;br /&gt;
&lt;br /&gt;
GET http://localhost:8080/persona-service/persona&lt;br /&gt;
&lt;br /&gt;
Obtiene el registro correspondiente al id.&lt;br /&gt;
&lt;br /&gt;
GET http://localhost:8080/persona-service/persona/{id}&lt;br /&gt;
&lt;br /&gt;
Borra el registro correspondiente al id.&lt;br /&gt;
&lt;br /&gt;
DELETE http://localhost:8080/persona-service/persona/{id}&lt;br /&gt;
&lt;br /&gt;
Actualiza el registro correspondiente al id.&lt;br /&gt;
&lt;br /&gt;
PUT http://localhost:8080/persona-service/persona/{id}&lt;br /&gt;
&lt;br /&gt;
Actualiza la colleccion de registros.&lt;br /&gt;
&lt;br /&gt;
PUT http://localhost:8080/persona-service/persona/jsonArray&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring Roo]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Spring_Roo&amp;diff=6556</id>
		<title>Spring Roo</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Spring_Roo&amp;diff=6556"/>
				<updated>2012-03-28T18:17:10Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Ver también */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Spring Roo]] es una herramienta RAD extensible para [[Java]] basada en [[Spring Framework]]. Basicamente es un generador de código avanzado, que se utiliza desde la linea de comandos invocando sentencias.&lt;br /&gt;
&lt;br /&gt;
La idea detrás de [[Spring Roo]] es incrementar la productividad del desarrollador [[Java]] sin comprometer la integridad estructural o la flexibilidad de la solución. No contiene un componente Runtime. Esto es muy importante, no solo porque no ata la solución al framework, sino porque no genera overhead. Se puede eliminar facilmente.&lt;br /&gt;
&lt;br /&gt;
Está construido con una serie de plugins (al estilo de [[Maven]]). Fue diseñado pensando en la usabilidad. Los comandos son contextuales; tiene los comandos &amp;quot;hint&amp;quot; y &amp;quot;help&amp;quot; para consultar el uso rápidamente y la tecla TAB para autocompletar. &lt;br /&gt;
&lt;br /&gt;
Está basado en scripts, por lo que en caso que se cometer un error, se puede hacer rollback. Todos los comandos escritos se van guardando automáticamente (log.roo).&lt;br /&gt;
&lt;br /&gt;
== Características ==&lt;br /&gt;
* Permite desarrollar una aplicación Web en minutos. Genera un war. Construye dos capas: la de persistencia y la de presentación. Para agregar la capa de negocio, se pueden agregar las clases manualmente a los controladores generados con Roo.&lt;br /&gt;
* Permite generar un modelo de datos complejo, incluyendo validaciones.&lt;br /&gt;
* La aplicación Web es RESTful y tiene soporte para internacionalización en varios idiomas.&lt;br /&gt;
* Tiene soporte de seguridad out-of-the-box.&lt;br /&gt;
* La presentación usa [[Dojo]] (incorporar otro, por ejemplo [[JQuery]], se hace a mano y es costoso).&lt;br /&gt;
&lt;br /&gt;
=== Generación de código ===&lt;br /&gt;
Es un generador de código ''hibrido'', utilizando generación activa y pasiva.&lt;br /&gt;
&lt;br /&gt;
Utiliza generación pasiva para generación de archivos java y xml. &lt;br /&gt;
Utiliza generación activa para la metadata con la ayuda de los tags @Roo* y modifica gradualmente .aj y los jsp.&lt;br /&gt;
&lt;br /&gt;
Sincroniza los cambios entre Roo y las modificaciones realizadas al código (roundtrip).&lt;br /&gt;
&lt;br /&gt;
[[Spring Roo]] no interviene en runtime, solo lo hace en tiempo de desarrollo. Una vez creado el proyecto con Spring Roo, podría eliminarse y seguir trabajando con un [[IDE]].&lt;br /&gt;
&lt;br /&gt;
=== Librerías/Frameworks que usa ===&lt;br /&gt;
&lt;br /&gt;
* [[Java]]&lt;br /&gt;
* [[AspectJ]]&lt;br /&gt;
* [[Eclipse]]&lt;br /&gt;
* Java Persistence API:  [[Hibernate]], [[OpenJPA]], [[EclipseLink]]&lt;br /&gt;
* [[Java Server Pages]]&lt;br /&gt;
* [[JUnit]]&lt;br /&gt;
* [[Log4J]]&lt;br /&gt;
* [[Maven]]&lt;br /&gt;
* [[Selenium]]&lt;br /&gt;
* [[Spring Framework]]&lt;br /&gt;
* [[Spring MVC]]&lt;br /&gt;
* [[Spring Security]]&lt;br /&gt;
* [[Spring Web Flow]]&lt;br /&gt;
&lt;br /&gt;
== Requisitos ==&lt;br /&gt;
&lt;br /&gt;
Tener instalado Java y Maven, las últimas versiones estables.&lt;br /&gt;
&lt;br /&gt;
== Configuración ==&lt;br /&gt;
Descargar la última versión de Roo del sitio oficial.&lt;br /&gt;
Descomprimir en una carpeta en el disco local. Ej: c:\roo-1.2&lt;br /&gt;
Incluir la carpeta con los ejecutables dentro de la variable de entorno PATH. Ej.: c:\roo-1.2\bin&lt;br /&gt;
&lt;br /&gt;
== Uso ==&lt;br /&gt;
Para la ejecución de comandos podemos utilizar:&lt;br /&gt;
* el shell de roo mediante linea de comando&lt;br /&gt;
* el shell que viene embebido en el [[SpringSource Tool Suite]] &lt;br /&gt;
* o el [[IDE]] que utilizás habitualmente, por ejemplo [[Eclipse]]. En este caso deberías instalar el plugin para trabajar con aspectos y maven.&lt;br /&gt;
&lt;br /&gt;
Para empezar a usar los comandos Roo mediante el shell, crear una carpeta e invocar a [[Spring Roo]]&lt;br /&gt;
Ej.:&lt;br /&gt;
&lt;br /&gt;
  mkdir helloworld&lt;br /&gt;
  cd helloworld&lt;br /&gt;
  roo&lt;br /&gt;
&lt;br /&gt;
Al hacer eso se iniciará la interfaz y desplegará el siguiente mensaje:&lt;br /&gt;
&lt;br /&gt;
     / __ \/ __ \/ __ \&lt;br /&gt;
    / /_/ / / / / / / /&lt;br /&gt;
   / _, _/ /_/ / /_/ /&lt;br /&gt;
  /_/ |_|\____/\____/    1.0.2.RELEASE [rev 638]&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  Welcome to Spring Roo. For assistance press TAB or type &amp;quot;hint&amp;quot; then hit ENTER.&lt;br /&gt;
  roo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La tecla TAB despliega las opciones:&lt;br /&gt;
&lt;br /&gt;
  */            /*            //            ;             addon         date          development   exit          help          hint&lt;br /&gt;
  metadata      poll          project       quit          reference     script        system        version&lt;br /&gt;
  roo&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
La sentencia help lista todos los comandos con descripciones breves.&lt;br /&gt;
&lt;br /&gt;
== Pasos para crear una aplicación mínima ==&lt;br /&gt;
&lt;br /&gt;
*Crear el proyecto&lt;br /&gt;
*Elegir el framework de persistencia&lt;br /&gt;
*Crear el modelo de dominio&lt;br /&gt;
*Generar de la capa de presentación&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En detalle podés verlo en [[Roo: Pasos para crear una aplicación mínima]].&lt;br /&gt;
&lt;br /&gt;
== Manejo de propiedades ==&lt;br /&gt;
&lt;br /&gt;
Roo genera archivos de propiedades dentro del proyecto, por ejemplo: database.properties. &lt;br /&gt;
Dichos archivos pueden ser modificados automáticamente por los comandos de roo. Se debe tener en cuenta entonces que al ejecutar un comando que impacte valores  configurados manualmente, será necesario volver a configurarlos. &lt;br /&gt;
Las claves definidas manualmente por el usuario no son alteradas por ningún comando de roo.&lt;br /&gt;
&lt;br /&gt;
== Maven ==&lt;br /&gt;
&lt;br /&gt;
Desde Roo se pueden ejecutar varias tareas de Maven sin tener que salir del entorno.&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
* 'perform tests' equivale a 'mvn test'&lt;br /&gt;
* 'perform eclipse' equivale a 'mvn eclipse:eclipse'&lt;br /&gt;
&lt;br /&gt;
== Seguridad ==&lt;br /&gt;
&lt;br /&gt;
El módulo de seguridad que viene predeterminado necesita unos pequeños cambios de configuración. De forma predeterminada viene configurado un path segurizado que no corresponde con la aplicación en desarrollo.&lt;br /&gt;
Se invoca mediante la sentencia:&lt;br /&gt;
&lt;br /&gt;
  security setup&lt;br /&gt;
&lt;br /&gt;
== Ejecutar un script ==&lt;br /&gt;
&lt;br /&gt;
Todo lo que se va ejecutando por consola, se va grabando en un archivo de log (log.roo).&lt;br /&gt;
Es posible re-ejecutar las acciones, copiando el archivo con otro nombre y utilizando la sentencia 'script &amp;lt;nombre de archivo&amp;gt;'&lt;br /&gt;
Ej.:&lt;br /&gt;
&lt;br /&gt;
  roo&amp;gt;script helloworld.roo&lt;br /&gt;
&lt;br /&gt;
== Ejemplos ==&lt;br /&gt;
&lt;br /&gt;
Necesitamos tener correctamente instaladas las siguientes versiones (verificar la configuración de las variables de entorno PATH y JAVA_HOME):&lt;br /&gt;
&lt;br /&gt;
* JDK 1.6 UPDATE 21&lt;br /&gt;
* Spring Roo 1.0.2&lt;br /&gt;
* Apache Maven 2.2.1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para poder ejecutar los siguientes ejemplos: &lt;br /&gt;
&lt;br /&gt;
* [[Ejemplo de script con Spring Roo]]&lt;br /&gt;
* [[Ejemplo de proyecto web ABM con Spring Roo]]&lt;br /&gt;
* [[Ejemplo de proyecto web ABM con SpringSource Tool Suite]]&lt;br /&gt;
&lt;br /&gt;
== Personalizacion de la capa de persistencia ==&lt;br /&gt;
&lt;br /&gt;
En [[Capa de Persistencia de Spring Roo]] veremos algunas características de uso con [[Oracle]].&lt;br /&gt;
&lt;br /&gt;
== Personalizacion de la capa de presentación ==&lt;br /&gt;
&lt;br /&gt;
En [[Capa de Presentación de Spring Roo]] veremos como cambiar la apariencia de las pantallas web.&lt;br /&gt;
&lt;br /&gt;
== Uso de mensajeria ==&lt;br /&gt;
&lt;br /&gt;
En [[JMS con Spring Roo]] veremos como incorporar tareas asincrónicas a la aplicación.&lt;br /&gt;
&lt;br /&gt;
== Uso de servicios web con Rest ==&lt;br /&gt;
&lt;br /&gt;
En [[Restful con Spring Roo]] veremos como incorporar servicios web sencillos a la aplicación, con la tecnología [http://www.dosideas.com/noticias/java/314-introduccion-a-los-servicios-web-restful.html Rest].&lt;br /&gt;
&lt;br /&gt;
== Creación de Add On ==&lt;br /&gt;
&lt;br /&gt;
Podemos incorporar nuevos comandos de Spring Roo, creando un Add On nuevo.&lt;br /&gt;
&lt;br /&gt;
* [https://fisheye.springsource.org/browse/spring-roo Listado de addons existentes]&lt;br /&gt;
* [http://www.slideshare.net/desmax74/spring-roo-internals-javaday-iv Arquitectura de Spring Roo]&lt;br /&gt;
* [http://abaddon-gtz.blogspot.com/2010/04/un-sencillo-add-on-de-spring-roo.html Un sencillo Add On de Spring Roo]&lt;br /&gt;
&lt;br /&gt;
== Problemas y soluciones ==&lt;br /&gt;
* [[Problemas frecuentes con Spring Roo]]&lt;br /&gt;
&lt;br /&gt;
== Para que es ideal ==&lt;br /&gt;
&lt;br /&gt;
* Hacer backends de Administración (ABMs/CRUDs con interfaz Web)&lt;br /&gt;
&lt;br /&gt;
== Lo que le falta ==&lt;br /&gt;
&lt;br /&gt;
* La posibilidad de importar modelos de datos,ya sea desde la base de datos o bien  de un archivo de configuración Hibernate. (próximamente disponible en la versión 1.1.0)&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
* [[SpringSource Tool Suite]]&lt;br /&gt;
* [[REST con Spring Roo]]&lt;br /&gt;
* [http://www.springsource.org/roo/ Web oficial de Spring Roo]&lt;br /&gt;
* [http://static.springsource.org/spring-roo/reference/html-single/index.html Manual de referencia]&lt;br /&gt;
* [http://www.infoq.com/presentations/Introducing-Spring-Roo Presentación hecha por el creador]&lt;br /&gt;
* [https://admin.na3.acrobat.com/_a204547676/p38684494/?launcher=false&amp;amp;fcsContent=true&amp;amp;pbMode=normal Curso de Spring Roo on-line]&lt;br /&gt;
* [http://blog.springsource.com/2009/05/27/roo-part-2/ Ejemplo con buscador dinámico]&lt;br /&gt;
* [http://stsmedia.net/introducing-spring-roo-part-2-security-jms-email-support/ Ejemplo con Jms y envío de mails]&lt;br /&gt;
&lt;br /&gt;
[[Category: Spring Framework]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6530</id>
		<title>Spring Test MVC</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6530"/>
				<updated>2012-03-12T14:51:25Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Método del controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El objetivo de [[Spring Test MVC]] es facilitar y mejorar los test de los controladores de Spring MVC. Estos controladores utilizan muchos componentes, como el mapeo de respuestas (ResponseBody), conversiones (json, xml), mapeo de excepciones (ExceptionHandler), etc. Estos componentes no pueden ser testeados mediante los test unitarios y hasta ahora solo se podían testear mediante tests de integración, esto implica embeber un contenedor para los servlets, desplegar la aplicación y testear con el cliente REST de Spring o directamente con herramientas como selenium. Estos test traen aparejado un alto costo de mantenimiento.&lt;br /&gt;
&lt;br /&gt;
[[Spring Test MVC]] mockea el contexto web de spring y permite invocar los servicio expuesto en los controladores ejecutando los interceptores de conversión y mapeo de Spring MVC.&lt;br /&gt;
&lt;br /&gt;
==Ejemplo==&lt;br /&gt;
&lt;br /&gt;
===Método del controller===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RequestMapping(value=&amp;quot;/persona&amp;quot;,method= RequestMethod.POST)&lt;br /&gt;
@ResponseStatus(HttpStatus.CREATED)&lt;br /&gt;
public @ResponseBody Persona guardar(@RequestBody Persona persona) {&lt;br /&gt;
   persona.setId(new Random(Long.MAX_VALUE).nextInt());&lt;br /&gt;
   return persona;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Test del método===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@Test&lt;br /&gt;
public void guardar_retorna_persona_con_id() throws Exception {&lt;br /&gt;
  String personaJson = &amp;quot;{\&amp;quot;nombre\&amp;quot;:\&amp;quot;coco\&amp;quot;}&amp;quot;;&lt;br /&gt;
  MockMvcBuilders.standaloneSetup(new PersonaController()).build()&lt;br /&gt;
  /* Operación y servicio */&lt;br /&gt;
  .perform(post(&amp;quot;/persona&amp;quot;)&lt;br /&gt;
  /* Content type para indicar formato de la información del body */&lt;br /&gt;
  .contentType(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Accep para que la respuesta sea JSON */&lt;br /&gt;
  .accept(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Set del body */&lt;br /&gt;
  .body(personaJson.getBytes()))&lt;br /&gt;
  /* Imprime por consola */&lt;br /&gt;
  .andDo(print())&lt;br /&gt;
  /* Control del status http */&lt;br /&gt;
  .andExpect(status().isCreated())&lt;br /&gt;
  /* Control de que exista el atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).exists())&lt;br /&gt;
  /* Control de que exista el atributo id */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;id&amp;quot;).exists())&lt;br /&gt;
  /* Control del valor del atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).value(&amp;quot;coco&amp;quot;));&lt;br /&gt;
                &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El proyecto demo se puede descargar de nuestro proyecto en [http://code.google.com/p/dosideas-aplicaciones-modelo/source/browse/ google-code].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
[https://github.com/SpringSource/spring-test-mvc Spring Test MVC ]&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring MVC]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6529</id>
		<title>Spring Test MVC</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6529"/>
				<updated>2012-03-12T14:50:48Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El objetivo de [[Spring Test MVC]] es facilitar y mejorar los test de los controladores de Spring MVC. Estos controladores utilizan muchos componentes, como el mapeo de respuestas (ResponseBody), conversiones (json, xml), mapeo de excepciones (ExceptionHandler), etc. Estos componentes no pueden ser testeados mediante los test unitarios y hasta ahora solo se podían testear mediante tests de integración, esto implica embeber un contenedor para los servlets, desplegar la aplicación y testear con el cliente REST de Spring o directamente con herramientas como selenium. Estos test traen aparejado un alto costo de mantenimiento.&lt;br /&gt;
&lt;br /&gt;
[[Spring Test MVC]] mockea el contexto web de spring y permite invocar los servicio expuesto en los controladores ejecutando los interceptores de conversión y mapeo de Spring MVC.&lt;br /&gt;
&lt;br /&gt;
==Ejemplo==&lt;br /&gt;
&lt;br /&gt;
===Método del controller===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RequestMapping(value=&amp;quot;/persona&amp;quot;,method= RequestMethod.POST)&lt;br /&gt;
@ResponseStatus(HttpStatus.CREATED)&lt;br /&gt;
public @ResponseBody Persona guardar(@RequestBody Persona persona) {&lt;br /&gt;
   persona.setId(new Random(Long.MAX_VALUE).nextInt());&lt;br /&gt;
   persona.setNombre(persona.getNombre());&lt;br /&gt;
   return persona;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Test del método===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@Test&lt;br /&gt;
public void guardar_retorna_persona_con_id() throws Exception {&lt;br /&gt;
  String personaJson = &amp;quot;{\&amp;quot;nombre\&amp;quot;:\&amp;quot;coco\&amp;quot;}&amp;quot;;&lt;br /&gt;
  MockMvcBuilders.standaloneSetup(new PersonaController()).build()&lt;br /&gt;
  /* Operación y servicio */&lt;br /&gt;
  .perform(post(&amp;quot;/persona&amp;quot;)&lt;br /&gt;
  /* Content type para indicar formato de la información del body */&lt;br /&gt;
  .contentType(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Accep para que la respuesta sea JSON */&lt;br /&gt;
  .accept(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Set del body */&lt;br /&gt;
  .body(personaJson.getBytes()))&lt;br /&gt;
  /* Imprime por consola */&lt;br /&gt;
  .andDo(print())&lt;br /&gt;
  /* Control del status http */&lt;br /&gt;
  .andExpect(status().isCreated())&lt;br /&gt;
  /* Control de que exista el atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).exists())&lt;br /&gt;
  /* Control de que exista el atributo id */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;id&amp;quot;).exists())&lt;br /&gt;
  /* Control del valor del atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).value(&amp;quot;coco&amp;quot;));&lt;br /&gt;
                &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El proyecto demo se puede descargar de nuestro proyecto en [http://code.google.com/p/dosideas-aplicaciones-modelo/source/browse/ google-code].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
[https://github.com/SpringSource/spring-test-mvc Spring Test MVC ]&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring MVC]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6528</id>
		<title>Spring Test MVC</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6528"/>
				<updated>2012-03-12T14:49:15Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El objetivo de [[Spring Test MVC]] es facilitar y mejorar los test de los controladores de Spring MVC. Estos controladores utilizan muchos componentes, como el mapeo de respuestas (ResponseBody), conversiones (json, xml), mapeo de excepciones (ExceptionHandler), etc. Estos componentes no pueden ser testeados mediante los test unitarios y hasta ahora solo se podían testear mediante tests de integración, esto implica embeber un contenedor para los servlets, desplegar la aplicación y testear con el cliente REST de Spring RestTemplate o directamente con herramientas como selenium. Estos test traen aparejado un alto costo de mantenimiento.&lt;br /&gt;
&lt;br /&gt;
[[Spring Test MVC]] mockea el contexto web de spring y permite invocar los servicio expuesto en los controladores ejecutando los interceptores de conversión y mapeo de Spring MVC.&lt;br /&gt;
&lt;br /&gt;
==Ejemplo==&lt;br /&gt;
&lt;br /&gt;
===Método del controller===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RequestMapping(value=&amp;quot;/persona&amp;quot;,method= RequestMethod.POST)&lt;br /&gt;
@ResponseStatus(HttpStatus.CREATED)&lt;br /&gt;
public @ResponseBody Persona guardar(@RequestBody Persona persona) {&lt;br /&gt;
   persona.setId(new Random(Long.MAX_VALUE).nextInt());&lt;br /&gt;
   persona.setNombre(persona.getNombre());&lt;br /&gt;
   return persona;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Test del método===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@Test&lt;br /&gt;
public void guardar_retorna_persona_con_id() throws Exception {&lt;br /&gt;
  String personaJson = &amp;quot;{\&amp;quot;nombre\&amp;quot;:\&amp;quot;coco\&amp;quot;}&amp;quot;;&lt;br /&gt;
  MockMvcBuilders.standaloneSetup(new PersonaController()).build()&lt;br /&gt;
  /* Operación y servicio */&lt;br /&gt;
  .perform(post(&amp;quot;/persona&amp;quot;)&lt;br /&gt;
  /* Content type para indicar formato de la información del body */&lt;br /&gt;
  .contentType(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Accep para que la respuesta sea JSON */&lt;br /&gt;
  .accept(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Set del body */&lt;br /&gt;
  .body(personaJson.getBytes()))&lt;br /&gt;
  /* Imprime por consola */&lt;br /&gt;
  .andDo(print())&lt;br /&gt;
  /* Control del status http */&lt;br /&gt;
  .andExpect(status().isCreated())&lt;br /&gt;
  /* Control de que exista el atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).exists())&lt;br /&gt;
  /* Control de que exista el atributo id */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;id&amp;quot;).exists())&lt;br /&gt;
  /* Control del valor del atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).value(&amp;quot;coco&amp;quot;));&lt;br /&gt;
                &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El proyecto demo se puede descargar de nuestro proyecto en [http://code.google.com/p/dosideas-aplicaciones-modelo/source/browse/ google-code].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
[https://github.com/SpringSource/spring-test-mvc Spring Test MVC ]&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring MVC]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6527</id>
		<title>Spring Test MVC</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6527"/>
				<updated>2012-03-12T14:40:24Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: /* Test del método */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El objetivo de [[Spring Test MVC]] es facilitar y mejorar los test de los controladores de Spring MVC. Estos controladores utilizan muchos componentes, como el mapeo de respuestas (ResponseBody), conversiones (json, xml), mapeo de excepciones (ExceptionHandler), etc. Estos componentes no pueden ser testeados mediante los test unitarios y hasta ahora solo se podían testear mediante tests de integración, esto implica embeber un contenedor para los servlets, desplegar la aplicación y testear con el cliente REST de Spring RestTemplate o directamente con herramientas como selenium y también un alto costo de mantenimiento.&lt;br /&gt;
&lt;br /&gt;
[[Spring Test MVC]] mockea el contexto web de spring y permite invocar los servicio expuesto en los controladores ejecutando los interceptores de conversión y mapeo de Spring MVC.&lt;br /&gt;
&lt;br /&gt;
==Ejemplo==&lt;br /&gt;
&lt;br /&gt;
===Método del controller===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RequestMapping(value=&amp;quot;/persona&amp;quot;,method= RequestMethod.POST)&lt;br /&gt;
@ResponseStatus(HttpStatus.CREATED)&lt;br /&gt;
public @ResponseBody Persona guardar(@RequestBody Persona persona) {&lt;br /&gt;
   persona.setId(new Random(Long.MAX_VALUE).nextInt());&lt;br /&gt;
   persona.setNombre(persona.getNombre());&lt;br /&gt;
   return persona;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Test del método===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@Test&lt;br /&gt;
public void guardar_retorna_persona_con_id() throws Exception {&lt;br /&gt;
  String personaJson = &amp;quot;{\&amp;quot;nombre\&amp;quot;:\&amp;quot;coco\&amp;quot;}&amp;quot;;&lt;br /&gt;
  MockMvcBuilders.standaloneSetup(new PersonaController()).build()&lt;br /&gt;
  /* Operación y servicio */&lt;br /&gt;
  .perform(post(&amp;quot;/persona&amp;quot;)&lt;br /&gt;
  /* Content type para indicar formato de la información del body */&lt;br /&gt;
  .contentType(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Accep para que la respuesta sea JSON */&lt;br /&gt;
  .accept(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Set del body */&lt;br /&gt;
  .body(personaJson.getBytes()))&lt;br /&gt;
  /* Imprime por consola */&lt;br /&gt;
  .andDo(print())&lt;br /&gt;
  /* Control del status http */&lt;br /&gt;
  .andExpect(status().isCreated())&lt;br /&gt;
  /* Control de que exista el atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).exists())&lt;br /&gt;
  /* Control de que exista el atributo id */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;id&amp;quot;).exists())&lt;br /&gt;
  /* Control del valor del atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).value(&amp;quot;coco&amp;quot;));&lt;br /&gt;
                &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El proyecto demo se puede descargar de nuestro proyecto en [http://code.google.com/p/dosideas-aplicaciones-modelo/source/browse/ google-code].&lt;br /&gt;
&lt;br /&gt;
== Ver también ==&lt;br /&gt;
[https://github.com/SpringSource/spring-test-mvc Spring Test MVC ]&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring MVC]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6526</id>
		<title>Spring Test MVC</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6526"/>
				<updated>2012-03-08T14:59:20Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El objetivo de [[Spring Test MVC]] es facilitar y mejorar los test de los controladores de Spring MVC. Estos controladores utilizan muchos componentes, como el mapeo de respuestas (ResponseBody), conversiones (json, xml), mapeo de excepciones (ExceptionHandler), etc. Estos componentes no pueden ser testeados mediante los test unitarios y hasta ahora solo se podían testear mediante tests de integración, esto implica embeber un contenedor para los servlets, desplegar la aplicación y testear con el cliente REST de Spring RestTemplate o directamente con herramientas como selenium y también un alto costo de mantenimiento.&lt;br /&gt;
&lt;br /&gt;
[[Spring Test MVC]] mockea el contexto web de spring y permite invocar los servicio expuesto en los controladores ejecutando los interceptores de conversión y mapeo de Spring MVC.&lt;br /&gt;
&lt;br /&gt;
==Ejemplo==&lt;br /&gt;
&lt;br /&gt;
===Método del controller===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RequestMapping(value=&amp;quot;/persona&amp;quot;,method= RequestMethod.POST)&lt;br /&gt;
@ResponseStatus(HttpStatus.CREATED)&lt;br /&gt;
public @ResponseBody Persona guardar(@RequestBody Persona persona) {&lt;br /&gt;
   persona.setId(new Random(Long.MAX_VALUE).nextInt());&lt;br /&gt;
   persona.setNombre(persona.getNombre());&lt;br /&gt;
   return persona;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Test del método===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@Test&lt;br /&gt;
public void guardar_retorna_persona_con_id() throws Exception {&lt;br /&gt;
  String personaJson = &amp;quot;{\&amp;quot;nombre\&amp;quot;:\&amp;quot;coco\&amp;quot;}&amp;quot;;&lt;br /&gt;
  MockMvcBuilders.standaloneSetup(new PersonaController()).build()&lt;br /&gt;
  /* Operación y servicio */&lt;br /&gt;
  .perform(post(&amp;quot;/persona&amp;quot;)&lt;br /&gt;
  /* Content type para indicar formato de la información del body */&lt;br /&gt;
  .contentType(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Accep para que la respuesta sea JSON */&lt;br /&gt;
  .accept(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Set del body */&lt;br /&gt;
  .body(personaJson.getBytes()))&lt;br /&gt;
  /* Imprime por consola */&lt;br /&gt;
  .andDo(print())&lt;br /&gt;
  /* Control del status http */&lt;br /&gt;
  .andExpect(status().isCreated())&lt;br /&gt;
  /* Control de que exista el atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).exists())&lt;br /&gt;
  /* Control de que exista el atributo id */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;id&amp;quot;).exists())&lt;br /&gt;
  /* Control del valor del atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).value(&amp;quot;coco&amp;quot;));&lt;br /&gt;
                &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El proyecto demo se puede descargar de nuestro proyecto en [http://code.google.com/p/dosideas-aplicaciones-modelo/source/browse/ google-code].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring MVC]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	<entry>
		<id>https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6525</id>
		<title>Spring Test MVC</title>
		<link rel="alternate" type="text/html" href="https://dosideas.com/wiki/index.php?title=Spring_Test_MVC&amp;diff=6525"/>
				<updated>2012-03-08T14:25:24Z</updated>
		
		<summary type="html">&lt;p&gt;Parivero: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El objetivo de [[Spring Test MVC]] es facilitar y mejorar los test de los controladores de Spring MVC. Estos controladores utilizan muchos componentes, como el mapeo de respuestas (ResponseBody), conversiones (json, xml), mapeo de excepciones (ExceptionHandler), etc. Estos componentes no pueden ser testeados mediante los test unitarios y hasta ahora solo se podían testear mediante tests de integración, esto implica embeber un contenedor para los servlets, desplegar la aplicación y testear con el cliente REST de Spring RestTemplate o directamente con herramientas como selenium y también un alto costo de mantenimiento.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ejemplo==&lt;br /&gt;
&lt;br /&gt;
===Método del controller===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@RequestMapping(value=&amp;quot;/persona&amp;quot;,method= RequestMethod.POST)&lt;br /&gt;
@ResponseStatus(HttpStatus.CREATED)&lt;br /&gt;
public @ResponseBody Persona guardar(@RequestBody Persona persona) {&lt;br /&gt;
   persona.setId(new Random(Long.MAX_VALUE).nextInt());&lt;br /&gt;
   persona.setNombre(persona.getNombre());&lt;br /&gt;
   return persona;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Test del método===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code java&amp;gt;&lt;br /&gt;
@Test&lt;br /&gt;
public void guardar_retorna_persona_con_id() throws Exception {&lt;br /&gt;
  String personaJson = &amp;quot;{\&amp;quot;nombre\&amp;quot;:\&amp;quot;coco\&amp;quot;}&amp;quot;;&lt;br /&gt;
  MockMvcBuilders.standaloneSetup(new PersonaController()).build()&lt;br /&gt;
  /* Operación y servicio */&lt;br /&gt;
  .perform(post(&amp;quot;/persona&amp;quot;)&lt;br /&gt;
  /* Content type para indicar formato de la información del body */&lt;br /&gt;
  .contentType(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Accep para que la respuesta sea JSON */&lt;br /&gt;
  .accept(MediaType.APPLICATION_JSON)&lt;br /&gt;
  /* Set del body */&lt;br /&gt;
  .body(personaJson.getBytes()))&lt;br /&gt;
  /* Imprime por consola */&lt;br /&gt;
  .andDo(print())&lt;br /&gt;
  /* Control del status http */&lt;br /&gt;
  .andExpect(status().isCreated())&lt;br /&gt;
  /* Control de que exista el atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).exists())&lt;br /&gt;
  /* Control de que exista el atributo id */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;id&amp;quot;).exists())&lt;br /&gt;
  /* Control del valor del atributo nombre */&lt;br /&gt;
  .andExpect(jsonPath(&amp;quot;nombre&amp;quot;).value(&amp;quot;coco&amp;quot;));&lt;br /&gt;
                &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El proyecto demo se puede descargar de nuestro proyecto en [http://code.google.com/p/dosideas-aplicaciones-modelo/source/browse/ google-code].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Spring MVC]]&lt;/div&gt;</summary>
		<author><name>Parivero</name></author>	</entry>

	</feed>