<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6825606071775982914</id><updated>2026-10-20T00:16:15.404-07:00</updated><title type='text'>Liferay</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-8276398993660239407</id><published>2013-09-13T22:25:00.002-07:00</published><updated>2013-09-13T23:28:41.400-07:00</updated><title type='text'>Liferay blog available as android app now</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;http://www.appsgeyser.com/594928&quot; style=&quot;background-color: white; color: #408fdf; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;&quot;&gt;http://www.appsgeyser.com/594928&lt;/a&gt;&lt;span style=&quot;background-color: white; color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;&quot;&gt;Try this out.And suggestions invited&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;&quot;&gt;All the posts here are for sharing knowledge.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #666666; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 12px;&quot;&gt;For more info:-&lt;/span&gt;&lt;a href=&quot;http://www.liferay.com/&quot;&gt;http://www.liferay.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #939598; font-family: Gothic, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; text-align: center; text-transform: uppercase;&quot;&gt;© 2013 LIFERAY INC. ALL RIGHTS RESERVED&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/8276398993660239407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2013/09/liferay-blog-available-as-android-app.html#comment-form' title='469 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/8276398993660239407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/8276398993660239407'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2013/09/liferay-blog-available-as-android-app.html' title='Liferay blog available as android app now'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>469</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-2642798617466971194</id><published>2012-02-27T20:58:00.000-08:00</published><updated>2012-02-27T20:58:52.483-08:00</updated><title type='text'>Liferay Portal 6.1 - Development Guide</title><content type='html'>&lt;div class=&quot;asset-link-content&quot;&gt;
&lt;div class=&quot;asset-full-content no-title&quot;&gt;
&lt;div class=&quot;asset-content&quot;&gt;
&lt;div class=&quot;journal-content-article&quot;&gt;
&lt;h1&gt;Resources for Liferay Developers&lt;/h1&gt;
&lt;p&gt;The following are useful reference resources for developers working with the Liferay Platform:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Liferay specific resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;strong&gt;What is a portal?&lt;/strong&gt;
&lt;a href=&quot;http://www.liferay.com/products/what-is-a-portal&quot;&gt;http://www.liferay.com/products/what-is-a-portal&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;strong&gt;Platform Javadocs:&lt;/strong&gt;
&lt;a href=&quot;http://docs.liferay.com/portal/6.1/javadocs/&quot;&gt;http://docs.liferay.com/portal/6.1/javadocs/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;strong&gt;Reference documentation for Liferay&#39;s XML files:&lt;/strong&gt;
&lt;a href=&quot;http://docs.liferay.com/portal/6.1/definitions/&quot;&gt;http://docs.liferay.com/portal/6.1/definitions/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;strong&gt;Reference documentation for Liferay&#39;s taglibs:&lt;/strong&gt;
&lt;a href=&quot;http://docs.liferay.com/portal/6.1/taglibs/&quot;&gt;http://docs.liferay.com/portal/6.1/taglibs/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sources for version 6.1:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/liferay/liferay-portal/tags&quot;&gt;https://github.com/liferay/liferay-portal/tags&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/liferay/liferay-plugins/tags&quot;&gt;https://github.com/liferay/liferay-plugins/tags&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sources of the development version:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/liferay/liferay-portal&quot;&gt;https://github.com/liferay/liferay-portal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;https://github.com/liferay/liferay-plugins&quot;&gt;https://github.com/liferay/liferay-plugins&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Related specifications and standards:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
Java 5 Javadocs:
&lt;a href=&quot;http://download.oracle.com/javase/1.5.0/docs/api/&quot;&gt;http://download.oracle.com/javase/1.5.0/docs/api/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
JavaEE 5 Javadocs:
&lt;a href=&quot;http://download.oracle.com/javaee/5/api/&quot;&gt;http://download.oracle.com/javaee/5/api/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
JavaEE Overview:
&lt;a href=&quot;http://www.oracle.com/technetwork/java/javaee/tech/index.html&quot;&gt;http://www.oracle.com/technetwork/java/javaee/tech/index.html&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Portlet Specification 2.0 (JSR-286):
&lt;a href=&quot;http://jcp.org/en/jsr/detail?id=286&quot;&gt;http://jcp.org/en/jsr/detail?id=286&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Web Services for Remote Portlets (WSRP):
&lt;a href=&quot;http://www.oasis-open.org/committees/wsrp/&quot;&gt;http://www.oasis-open.org/committees/wsrp/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Java Content Repository (JSR-170):
&lt;a href=&quot;http://jcp.org/en/jsr/detail?id=170&quot;&gt;http://jcp.org/en/jsr/detail?id=170&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Java Server Faces 1.2 (JSR-252):
&lt;a href=&quot;http://www.jcp.org/en/jsr/detail?id=252&quot;&gt;http://www.jcp.org/en/jsr/detail?id=252&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Java Server Faces 2.0 (JSR-314):
&lt;a href=&quot;http://www.jcp.org/en/jsr/detail?id=314&quot;&gt;http://www.jcp.org/en/jsr/detail?id=314&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
OpenSocial:
&lt;a href=&quot;http://www.opensocial.org/&quot;&gt;http://www.opensocial.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Sitemap protocol:
&lt;a href=&quot;http://sitemaps.org/&quot;&gt;http://sitemaps.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
WebDAV:
&lt;a href=&quot;http://webdav.org/&quot;&gt;http://webdav.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
SOAP:
&lt;a href=&quot;http://www.w3.org/TR/2007/REC-soap12-part0-20070427/&quot;&gt;http://www.w3.org/TR/2007/REC-soap12-part0-20070427/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
HTML 5:
&lt;a href=&quot;http://html5.org/&quot;&gt;http://html5.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
WCAG 2.0:
&lt;a href=&quot;http://www.w3.org/WAI/intro/wcag20.php&quot;&gt;http://www.w3.org/WAI/intro/wcag20.php&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Related and commonly used technologies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
Spring Framework:
&lt;a href=&quot;http://www.springsource.org/&quot;&gt;http://www.springsource.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Hibernate:
&lt;a href=&quot;http://www.hibernate.org/&quot;&gt;http://www.hibernate.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Struts 1:
&lt;a href=&quot;http://struts.apache.org/1.x/&quot;&gt;http://struts.apache.org/1.x/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Lucene:
&lt;a href=&quot;http://lucene.apache.org/&quot;&gt;http://lucene.apache.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Alloy UI:
&lt;a href=&quot;http://alloy.liferay.com/&quot;&gt;http://alloy.liferay.com/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
YUI 3:
&lt;a href=&quot;http://developer.yahoo.com/yui/3/&quot;&gt;http://developer.yahoo.com/yui/3/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
jQuery:
&lt;a href=&quot;http://jquery.com/&quot;&gt;http://jquery.com/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
IceFaces:
&lt;a href=&quot;http://www.icefaces.org/main/home/&quot;&gt;http://www.icefaces.org/main/home/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
PortletFaces:
&lt;a href=&quot;http://www.portletfaces.org/&quot;&gt;http://www.portletfaces.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Vaadin:
&lt;a href=&quot;http://vaadin.com/home&quot;&gt;http://vaadin.com/home&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
OpenXava:
&lt;a href=&quot;http://www.openxava.org/web/guest/liferay&quot;&gt;http://www.openxava.org/web/guest/liferay&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Apache ant:
&lt;a href=&quot;http://ant.apache.org/&quot;&gt;http://ant.apache.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Maven:
&lt;a href=&quot;http://maven.apache.org/&quot;&gt;http://maven.apache.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Selenium:
&lt;a href=&quot;http://seleniumhq.org/&quot;&gt;http://seleniumhq.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Tomcat:
&lt;a href=&quot;http://tomcat.apache.org/&quot;&gt;http://tomcat.apache.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
JBoss Application Server:
&lt;a href=&quot;http://www.jboss.org/&quot;&gt;http://www.jboss.org/&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/2642798617466971194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/02/liferay-portal-61-development-guide.html#comment-form' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/2642798617466971194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/2642798617466971194'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/02/liferay-portal-61-development-guide.html' title='Liferay Portal 6.1 - Development Guide'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-7782411057608202911</id><published>2012-02-06T03:57:00.000-08:00</published><updated>2012-02-06T03:58:17.683-08:00</updated><title type='text'>Liferay India developers group on Facebook</title><content type='html'>&lt;a href=&quot;http://www.facebook.com/groups/180811265343833/&quot;&gt;&lt;/a&gt;

This group is running successfully from past few months.It helps me out to learn many new things in Liferay.I just take the initiate but all the members Satish,Mazhar,Vamc (i just remeber these names only ) even everyone who are here contribute alot.
Hope this will continue and get a large number of members this year.
&quot;http://www.facebook.com/groups/180811265343833/&quot;

Thanks alot for being a part of this community</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/7782411057608202911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/02/liferay-india-developers-group-on.html#comment-form' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/7782411057608202911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/7782411057608202911'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/02/liferay-india-developers-group-on.html' title='Liferay India developers group on Facebook'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-6123319235234259221</id><published>2012-01-18T01:20:00.000-08:00</published><updated>2012-01-18T01:20:24.946-08:00</updated><title type='text'>Liferay 6.1 and SASS</title><content type='html'>&lt;div class=&quot;entry-body&quot;&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; Lieray 6.1 CE is released and many of you have started using it. There are lots of features in Liferay 6.1 and one among them is the facility to use SASS in Liferay.&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;SASS:&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
SASS(
&lt;a target=&quot;_blank&quot; href=&quot;http://sass-lang.com/&quot;&gt;http://sass-lang.com&lt;/a&gt;
) stands for Syntactically Awesome StyleSheets. It is a tool that allows you to write CSS more easily
&lt;strong&gt;.&amp;nbsp; &lt;/strong&gt;
It is an extension of CSS3 which means whatever CSS file is a valid SassyCSS (SCSS). It allows you to use variables, nested rules, mixins, inline imports, interpolation, arguments, manipulating colors and more with a fully CSS-compatible syntax. Sass generates well formatted CSS and it is much easier to organize and maintain your stylesheets.
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Compass :&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
Compass(
&lt;a target=&quot;_blank&quot; href=&quot;http://compass-style.org/&quot;&gt;http://compass-style.org&lt;/a&gt;
) is an open-source CSS authoring framework which makes easier to build and maintain your markup and stylesheets. By using compass, you can write your own stylesheet in Sass instead of CSS.
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;How does Compass Work?&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
It can be imported using
&lt;strong&gt;@import &quot;compass&quot;&lt;/strong&gt;
in CSS.&amp;nbsp;SCSS is built based on the CSS3 specification which means that it is highly compatible with CSS3.&amp;nbsp;SCSS also has all the power of Sass.
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; We’ll see here as how to use the variables, nested rules, mixins, inline imports, interpolation and arguments through CSS files.&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Variables:&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; We’ll see how to use variables and a custom mixin to show how Compass makes it easy to reuse colors, sizes, and other values without repeating.&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; /* Variable Declaration */&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; /*These variables can be used globally throughout your stylesheets */&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;img style=&quot;width: 255px; height: 140px; &quot; src=&quot;/documents/4108217/12122373/variable.png&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;pre style=&quot;background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: blue; text-align: justify; background-position: initial initial; background-repeat: initial initial; &quot;&gt; &lt;/pre&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Example:&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;img style=&quot;width: 251px; height: 112px; &quot; src=&quot;/documents/4108217/12122373/demo.png&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Liferay6.1 &amp;nbsp;&lt;/strong&gt;
&lt;strong&gt;&amp;nbsp; Liferay 6.0.x&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;img style=&quot;width: 264px; height: 91px; &quot; src=&quot;/documents/4108217/12122373/column-content1.png&quot; alt=&quot;&quot;&gt;
&lt;img style=&quot;width: 263px; height: 91px; &quot; src=&quot;/documents/4108217/12122373/column-content2.png&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Mixins:&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; By using the mixin, you can re-use the styles, properties &amp;amp; selectors without copying to other selectors. To achieve this , you need to package the properties with @mixin and to include it in other element with @include.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;img style=&quot;width: 208px; height: 278px; &quot; src=&quot;/documents/4108217/12122373/mixins.png&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Example:&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Liferay 6.1 &amp;nbsp;&lt;/strong&gt;
&lt;strong&gt;Liferay 6.0.x&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;img style=&quot;width: 244px; height: 161px; &quot; src=&quot;/documents/4108217/12122373/mixin1.png&quot; alt=&quot;&quot;&gt;
&lt;img style=&quot;width: 244px; height: 161px; &quot; src=&quot;/documents/4108217/12122373/mixin2.png&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;img style=&quot;width: 257px; height: 129px; &quot; src=&quot;/documents/4108217/12122373/portlet1.png&quot; alt=&quot;&quot;&gt;
&lt;img style=&quot;width: 212px; height: 210px; &quot; src=&quot;/documents/4108217/12122373/portlet2.png&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Nested Rules:&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; Nesting avoids repeating CSS selectors and also keeps the style compact for a certain area of the User Interface.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; Let us have a look at an example of custom.css code for navigation part in themes. After using the nesting rule, the code should look like this :&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Liferay 6.1 &amp;nbsp; &amp;nbsp;&lt;/strong&gt;
&lt;strong&gt;Liferay 6.0.x&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;img style=&quot;width: 259px; height: 612px; &quot; src=&quot;/documents/4108217/12122373/nav1.png&quot; alt=&quot;&quot;&gt;
&lt;img style=&quot;width: 259px; height: 660px; &quot; src=&quot;/documents/4108217/12122373/nav2.png&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Parent Reference:&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; Parent reference allows you to reference a parent selector &amp;nbsp;in the case of pseudo-classes like :hover, :link, :visited and :active states.&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Liferay 6.1&lt;/strong&gt;
&lt;strong&gt;Liferay 6.0.x&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;
&lt;img style=&quot;width: 280px; height: 180px; &quot; src=&quot;/documents/4108217/12122373/parentref1.png&quot; alt=&quot;&quot;&gt;
&lt;img style=&quot;width: 280px; height: 180px; &quot; src=&quot;/documents/4108217/12122373/parentref2.png&quot; alt=&quot;&quot;&gt;
&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Interpolation:&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; We can also use SassScript variables in selectors and property names using #{} interpolation. Here’s the example:&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;strong&gt;Liferay 6.1&lt;/strong&gt;
&lt;strong&gt;Liferay 6.0.x&lt;/strong&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;img style=&quot;width: 280px; height: 146px; &quot; src=&quot;/documents/4108217/12122373/interpolation1.png&quot; alt=&quot;&quot;&gt;
&lt;img style=&quot;width: 216px; height: 141px; &quot; src=&quot;/documents/4108217/12122373/interpolation2.png&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
Liferay6.1 allows you to use Sass which helps the code be simpler for mobile site design.&amp;nbsp;(Thanks to BradleyWood’s solution in this&amp;nbsp;
&lt;a href=&quot;https://www.liferay.com/community/forums/-/message_boards/view_message/11974885#_19_message_12006819&quot;&gt;forum post&lt;/a&gt;
).&amp;nbsp;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
&lt;img style=&quot;width: 506px; height: 410px; &quot; src=&quot;/documents/4108217/12122373/mobile.png&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt;
As said in Sass , it makes CSS fun again and with Liferay 6.1, you can easily create manageable style sheets and start updating to Liferay 6.1 and use Sass to manage your style sheets&amp;nbsp;
&lt;img height=&quot;20&quot; width=&quot;20&quot; title=&quot;smiley&quot; src=&quot;http://cdn.www.liferay.com/html/js/editor/ckeditor/plugins/smiley/images/regular_smile.gif&quot; alt=&quot;smiley&quot;&gt;
.
&lt;/p&gt;
&lt;p style=&quot;text-align: justify; &quot;&gt; &amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/6123319235234259221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-61-and-sass.html#comment-form' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/6123319235234259221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/6123319235234259221'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-61-and-sass.html' title='Liferay 6.1 and SASS'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-191248094692421616</id><published>2012-01-13T04:15:00.000-08:00</published><updated>2012-01-13T04:15:41.576-08:00</updated><title type='text'>Upgrading Liferay Portal 6.0 to Liferay Portal 6.1</title><content type='html'>&lt;div class=&quot;asset-full-content no-title&quot;&gt;
&lt;div class=&quot;asset-content&quot;&gt;
&lt;div class=&quot;journal-content-article&quot;&gt;
&lt;h2&gt;Upgrading Liferay&lt;/h2&gt;
&lt;p&gt;Liferay upgrades are fairly straightforward. A consistent set of steps is all you need to follow to upgrade a standard Liferay installation. Things do get more complicated if your organization has used Ext plugins to customize Liferay. It&#39;s possible that API changes in the new version will break your existing code. This, however, is usually pretty easy for your developers to fix. Portlet plugins which use Liferay APIs should be reviewed and their services rebuilt against the new release. Theme plugins may require some modifications in order to take advantage of new features, and if they&#39;re using Liferay APIs, they should be reviewed. Much effort has been made to make upgrades as painless as possible; however, this is not a guarantee that everything will work without modification. Ext plugins are the most complicating factor in an upgrade, so it is important to test as much as possible.&lt;/p&gt;
&lt;p&gt;As a general rule, you can upgrade from one major release to the next major release. For example, you can upgrade directly from Liferay 5.2.x to 6.0.x, but not from 5.2.x to 6.1.x. If you need to upgrade over several major releases, you&#39;ll need to run the upgrade procedure for each major release until you reach the release you want. This doesn&#39;t mean you need to run the procedure for every point release or service pack; you only need to run the procedure for the major releases. A good practice is to use the latest version of each major release to upgrade your system.&lt;/p&gt;
&lt;p&gt;Now that we&#39;ve gotten the general philosophy of upgrading out of the way, let&#39;s outline the procedure you&#39;ll undergo for upgrading a Liferay 6.0 installation to a 6.1 installation. If you&#39;re running a previous version of Liferay and need to upgrade to 6.0 first, please see the instructions in the previous version of this document.&lt;/p&gt;
&lt;h3&gt;Upgrading Liferay Portal 6.0 to Liferay Portal 6.1&lt;/h3&gt;
&lt;p&gt;There are a few things you&#39;ll want to prepare before you actually perform the upgrade. Specifically, you&#39;ll need to review your image gallery usage, review new Liferay 6.1 defaults, and catalog all the plugins you have installed. After you&#39;ve performed these three tasks, you&#39;ll be ready to upgrade.&lt;/p&gt;
&lt;p&gt;Liferay 6.1 introduces a major change to how Liferay handles files. No longer do we have a separate Document Library and Image Gallery; instead, these have been combined into Documents and Media. If you were using Liferay&#39;s Image Gallery to store images, these can be migrated over during an upgrade, but you&#39;ll have to take some extra steps first.&lt;/p&gt;
&lt;p&gt;
In Liferay 6.0, you had three ways you could store images in the Image Gallery. You could use the
&lt;code&gt;DatabaseHook&lt;/code&gt;
and store them as BLOBs in the database; you could use the
&lt;code&gt;DLHook&lt;/code&gt;
to store them in the Document Library, or you could use the
&lt;code&gt;FileSystemHook&lt;/code&gt;
to store them in a folder on your server&#39;s file system. Before you upgrade, you&#39;ll need to set whichever property you were using in your 6.0
&lt;code&gt;portal-ext.properties&lt;/code&gt;
file, because by default, none of them are enabled in 6.1. Setting one of the properties triggers the migration during the upgrade process. Below are the three properties; you&#39;ll need to set only
&lt;em&gt;one&lt;/em&gt;
of them (the one you were using).
&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;image.hook.impl=com.liferay.portal.image.DatabaseHook&lt;p&gt; image.hook.impl=com.liferay.portal.image.DLHook &lt;/p&gt;image.hook.impl=com.liferay.portal.image.FileSystemHook &lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
The next thing you&#39;ll need to look at are the defaults that have changed from 6.0 to 6.1. These are preserved in
&lt;code&gt;portal-legacy-6.0.properties&lt;/code&gt;
in the source. The 6.0 values are:
&lt;br&gt;
&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;users.last.name.required=true layout.types=portlet,panel,embedded,article,url,&lt;p&gt;link_to_layout editor.wysiwyg.portal-web.&lt;p&gt;docroot.html.portlet.message_boards.edit_message.bb_code.jsp=bbcode &lt;/p&gt;setup.wizard.enabled=false discussion.subscribe.by.default=false&lt;/p&gt; message.boards.subscribe.by.default=false &lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;The 6.1 values have changed to:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;users.last.name.required=false layout.types=portlet,&lt;p&gt;panel,embedded,url,link_to_layout editor.wysiwyg.portal-web.&lt;/p&gt;&lt;p&gt;docroot.html.portlet.message_boards.edit_message.bb_code.jsp=ckeditor_bbcode&lt;/p&gt; setup.wizard.enabled=true discussion.subscribe.by.default=true message.boards.subscribe.by.default=true &lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
If you don&#39;t like the defaults, you can change them back in one shot by adding a system property to your JVM&#39;s startup. This differs by application servers. In Tomcat, you&#39;d modify
&lt;code&gt;setenv.sh&lt;/code&gt;
/
&lt;code&gt;setenv.bat&lt;/code&gt;
and append the option
&lt;code&gt;-Dexternal-properties=portal-legacy-6.0.properties&lt;/code&gt;
to the environment variable JAVA_OPTS. The scripts
&lt;code&gt;setenv.sh&lt;/code&gt;
or
&lt;code&gt;setenv.bat&lt;/code&gt;
are not delivered with default Tomcat, but do exist in the bundles. If they&#39;re there, Tomcat uses them in the startup process, so it&#39;s a nice way to separate your own settings from Tomcat&#39;s default shell scripts. Alternatively, of course, you can override some or all of them in your
&lt;code&gt;portal-ext.properties&lt;/code&gt;
along with your other overrides.
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Finally, you need to take note of any plugins you have installed. Liferay&#39;s plugins are usually version-specific, so you&#39;ll need to obtain new versions of them for the new release of Liferay. If you have custom plugins created by your development team, they&#39;ll need to build, test, and optionally modify them to work with the new release of Liferay. Don&#39;t attempt an upgrade without collecting all the plugins you&#39;ll need first.&lt;/p&gt;
&lt;p&gt;Once you&#39;ve reviewed your properties and collected all the plugins you&#39;ll need, you&#39;re ready to follow the upgrade procedure. Remember to back up your system before you begin.&lt;/p&gt;
&lt;p&gt;There are two different procedures to upgrade Liferay. The first one, upgrading a Liferay bundle, is the most common. The second procedure is for upgrading a Liferay installation on an application server. We&#39;ll go over both.&lt;/p&gt;
&lt;p&gt;
In both cases, Liferay auto-detects whether the database requires an upgrade the first time the new version is started. When Liferay does this, it upgrades the database to the format required by the new version. In order to perform this task, Liferay
&lt;em&gt;must&lt;/em&gt;
be accessing the database with an ID that can create, drop, and modify tables. Make sure that you have granted these permissions to the ID before you attempt to upgrade Liferay. And, of course, we&#39;ll run the risk of overly repeating ourselves: back up your database.
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Let&#39;s look at upgrading a bundle, which is the easiest upgrade path.&lt;/p&gt;
&lt;h4&gt;Upgrading a bundle&lt;/h4&gt;
&lt;p&gt;If you&#39;re running a Liferay bundle, the best way to do the upgrade is to follow the steps below. The new Liferay is installed in a newer version of your bundle runtime. For example, the Liferay/Tomcat bundle for 6.0 used Tomcat 6 by default; the 6.1 bundle uses Tomcat 7. Though there is a Tomcat 6 bundle of Liferay 6.1, that bundle also uses a newer release of Tomcat than the one from 6.0. This is the case for all runtimes that Liferay supports. We generally recommend that you use the latest version of your runtime bundle, as it will be supported the longest.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Obtain the new bundle. Unzip the bundle to an appropriate location on your system.&lt;/li&gt;
&lt;li&gt;
Copy your
&lt;code&gt;portal-ext.properties&lt;/code&gt;
file and your
&lt;code&gt;data&lt;/code&gt;
folder to the new bundle.
&lt;/li&gt;
&lt;li&gt;
Review your
&lt;code&gt;portal-ext.properties&lt;/code&gt;
file as described above. If you were using the Image Gallery, make the necessary modifications so that your files are migrated to Documents and Media. Review the new defaults and decide whether you want to use them. Review any other modifications you&#39;ve made.
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;Start your application server. Watch the console as Liferay starts: it should upgrade the database automatically.&lt;/li&gt;
&lt;li&gt;
When the upgrade completes, install any plugins you were using in your old version of Liferay. Make sure you use the versions of those plugins that are designed for Liferay 6.1. If you have your own plugins, your development team will need to migrate the code in these ahead of time and provide .war files to you.
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;Browse around in your new installation and verify that everything is working. Have your QA team test everything. If all looks good, you can delete the old application server with the old release of Liferay in it from the bundle directory. You have a backup of it anyway, right?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
As you can see, upgrading a bundle is generally pretty simple. But not everybody can use bundles: sometimes, specific application servers or application server versions are mandated by the environment you&#39;re in or by management. For this reason, Liferay also ships as an installable .war file that can be used on any supported application server.
&lt;br&gt;
&lt;/p&gt;
&lt;h4&gt;Upgrading using a .war file&lt;/h4&gt;
&lt;p&gt;Running a manual upgrade is almost as easy as upgrading a bundle:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;li&gt;Obtain the Liferay Portal .war file and the dependency .jars archive.&lt;/li&gt;
&lt;li&gt;
Copy your customized
&lt;code&gt;portal-ext.properties&lt;/code&gt;
file to a safe place and review it as described above, making all the appropriate changes.
&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;Undeploy the old version of Liferay and shut down your application server.&lt;/li&gt;
&lt;li&gt;Copy the new versions of Liferay&#39;s dependency .jars to a location on your server&#39;s class path, overwriting the ones you already have for the old version of Liferay. This location is documented for your application server in chapter 11.&lt;/li&gt;
&lt;li&gt;Deploy the new Liferay .war file to your application server. Follow the deployment instructions in chapter 11.&lt;/li&gt;
&lt;li&gt;Start (or, if your app server has a console from which you&#39;ve installed the .war, restart) your application server. Watch the console as Liferay starts: it should upgrade the database automatically. Verify that your portal is operating normally, and then install any plugins you were using in your old version of Liferay. Make sure you use the versions of theose plugins that are designed for Liferay 6.1. If you have your own plugins, your development team will need to migrate the code in these ahead of time and provide .war files to you.&lt;/li&gt;
&lt;li&gt;Browse around in your new installation and verify that everything is working. Have your QA team test everything. If all looks good, you&#39;re finished.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&#39;s all there is to it. Most everything is handled by Liferay&#39;s upgrade procedure. Note that as stated above, if you have to upgrade over several Liferay versions, you will need to repeat these steps for each major release.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/191248094692421616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/upgrading-liferay-portal-60-to-liferay.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/191248094692421616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/191248094692421616'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/upgrading-liferay-portal-60-to-liferay.html' title='Upgrading Liferay Portal 6.0 to Liferay Portal 6.1'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-340175485985274117</id><published>2012-01-12T23:24:00.000-08:00</published><updated>2012-01-12T23:24:12.808-08:00</updated><title type='text'>New Liferay 6.1 Feature - Remote Development from Liferay IDE</title><content type='html'>&lt;div class=&quot;entry-body&quot;&gt;
&lt;p&gt; I&#39;d like to mention one of the new features in the upcoming release of Liferay 6.1, which is the remote development and deployment support from Liferay IDE. &amp;nbsp;The idea is that with this feature you can build Liferay projects in Liferay IDE like normal but instead of the Liferay server running locally it is running on a remote host. &amp;nbsp;This is accomplished through two things, 1) new remote server adapter in Liferay IDE and 2) Server manager plugin (new in 6.1) deployed to the remote Liferay server&amp;nbsp;&lt;/p&gt;
&lt;p&gt; This feature will be officially available with the Liferay 6.1 CE release, but since it is only in beta, now is a good time to try it out and give feedback.&lt;/p&gt;
&lt;p&gt; For those who wish to try this out here are the steps to setting it up.&lt;/p&gt;
&lt;p&gt;
1. Download the
&lt;a target=&quot;_blank&quot; href=&quot;http://sourceforge.net/projects/lportal/files/Liferay%20Portal/6.1.0%20B4/liferay-portal-tomcat-6.1.0-ce-b4-20111110.zip/download&quot;&gt;Liferay Portal 6.1 Beta4 Tomcat bundle&lt;/a&gt;
(Only tomcat is supported in beta4, &amp;nbsp;both JBoss and Glassfish will be supported by 6.1 GA release)
&lt;/p&gt;
&lt;p&gt; 2. Start Tomcat bundle on remote host (or even localhost)&lt;/p&gt;
&lt;p&gt;
3. Download the
&lt;a target=&quot;_blank&quot; href=&quot;http://sourceforge.net/projects/lportal/files/Liferay%20Plugins/6.1.0%20B4/server-manager-web-6.1.0.1-ce-b4-20111110.war/download&quot;&gt;Server Manager plugin for 6.1 Beta4&lt;/a&gt;
(This plugin provides the API needed by Liferay IDE to administer remote plugins)
&lt;/p&gt;
&lt;p&gt; 4. Deploy Server Manager plugin into remote Tomcat server&lt;/p&gt;
&lt;p&gt;
5. Install the latest
&lt;a target=&quot;_blank&quot; href=&quot;http://releases.liferay.com/tools/ide/eclipse/indigo/stable/&quot;&gt;stable&lt;/a&gt;
or
&lt;a target=&quot;_blank&quot; href=&quot;http://releases.liferay.com/tools/ide/eclipse/indigo/nightly/&quot;&gt;nightly&lt;/a&gt;
&amp;nbsp;version of Liferay IDE (links are updatesite URLs to use in Eclipse install manager)
&lt;/p&gt;
&lt;p&gt;
6. Create a new server in Liferay IDE,
&lt;em&gt;File &amp;gt; New &amp;gt; Server &amp;gt; Liferay &amp;gt; Remote Liferay Server&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;
&lt;img style=&quot;width: 525px; height: 289px; &quot; src=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=1d28fdf7-f5a2-4e66-b584-811d57ce2aca&amp;groupId=4615837&amp;t=1324480920331&quot; alt=&quot;&quot;&gt;
&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt; 7. Specify a local tomcat bundle for the runtime stub (this is needed for libraries to compile project)&lt;/p&gt;
&lt;p&gt;
&lt;img style=&quot;width: 457px; height: 257px; &quot; src=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=08006d24-a184-4f08-bd32-7b4db1ded1d2&amp;groupId=4615837&amp;t=1324480920321&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p&gt; 8. Specify the IP address of remote tomcat server along with Omni admin username/password&lt;/p&gt;
&lt;p&gt;
&lt;img style=&quot;width: 469px; height: 414px; &quot; src=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=50aa8ee3-feac-4a48-9972-6a4836f03bc8&amp;groupId=4615837&amp;t=1324480920323&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p&gt; Once you have done this you should see the server console log messages printed in the normal Eclipse console view.&lt;/p&gt;
&lt;p&gt;
&lt;img style=&quot;width: 859px; height: 221px; &quot; src=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=de7eaf50-d656-4665-af23-47ab850042c2&amp;groupId=4615837&amp;t=1324480920328&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p&gt;
9. Create and deploy Liferay projects as usual then publish (deploy) them to the server, see
&lt;a target=&quot;_blank&quot; href=&quot;http://www.liferay.com/documentation/liferay-portal/6.0/development/-/ai/set-up&quot;&gt;Liferay IDE getting started guide&lt;/a&gt;
for a walkthrough of this.
&lt;/p&gt;
&lt;p&gt;
&lt;img style=&quot;width: 1102px; height: 269px; &quot; src=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=b5ee5945-d829-4b1c-99e8-e7efb62f5a44&amp;groupId=4615837&amp;t=1324480920332&quot; alt=&quot;&quot;&gt;
&lt;/p&gt;
&lt;p&gt; Now when you modify files in your project, every 15 seconds it will publish the delta of any changes to remote server. &amp;nbsp;However, you can publish changes immediately using the &quot;publish&quot; action in the servers view. &amp;nbsp;If you want to change the automatic publish rate you can do that in the server configuration editor (double click server in Servers view).&lt;/p&gt;
&lt;p&gt;
For anyone who decides to try this out and want to give feedback with suggestions or problems please either open a JIRA ticket for the
&lt;a target=&quot;_blank&quot; href=&quot;http://issues.liferay.com/browse/IDE&quot;&gt;IDE project&lt;/a&gt;
or enter a new topic on the
&lt;a target=&quot;_blank&quot; href=&quot;http://www.liferay.com/community/forums/-/message_boards/category/4627757&quot;&gt;IDE forums&lt;/a&gt;
.
&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/340175485985274117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/new-liferay-61-feature-remote.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/340175485985274117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/340175485985274117'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/new-liferay-61-feature-remote.html' title='New Liferay 6.1 Feature - Remote Development from Liferay IDE'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-1950656913179129594</id><published>2012-01-12T04:20:00.000-08:00</published><updated>2012-01-12T04:20:32.751-08:00</updated><title type='text'>Writing Liferay Apps with Web Content Templates</title><content type='html'>
&lt;p&gt;
&lt;img style=&quot;background-color: rgb(220, 220, 220); border-top-left-radius: 10px 15px; border-top-right-radius: 30px 25px; border-bottom-right-radius: 10px 15px; border-bottom-left-radius: 30px 25px; border-top-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); border-left-color: rgb(0, 0, 0); border-image: initial; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; margin-left: 10px; margin-right: 10px; float: right; width: 236px; height: 327px; &quot; src=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=a6293792-4d70-452b-bbe4-feec948c7a85&amp;groupId=5912873&amp;t=1326310474315&quot; alt=&quot;&quot;&gt;
One of the often overlooked features of
&lt;a href=&quot;http://www.liferay.com/documentation/liferay-portal/6.1/user-guide/-/ai/using-liferay-web-content-management&quot;&gt;Liferay&#39;s WCM system&lt;/a&gt;
is the ability to write non-trivial apps using it. &amp;nbsp;There have been a few blog posts about this, notably Ray Augé&#39;s
&lt;a href=&quot;/web/raymond.auge/blog/-/blogs/advanced-web-content-example-with-ajax&quot;&gt;Advanced Web Content Example With AJAX&lt;/a&gt;
. &amp;nbsp;In the community, it&#39;s great for me because I can quickly create interesting visualizations of community data and share it with you immediately. &amp;nbsp;There are some pros and cons to this approach:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Benefits:&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
No compilation needed - WCM relies on the use of
&lt;a href=&quot;http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Journal+Template+(Velocity)&quot;&gt;Templates&lt;/a&gt;
, written in interpreted (i.e. scripted) languages such as
&lt;a href=&quot;http://velocity.apache.org/&quot;&gt;Velocity Templates&lt;/a&gt;
. &amp;nbsp;This means you can quickly make a change and see your results quickly.
&lt;/li&gt;
&lt;li&gt;
No deployment needed - since Web Content isn&#39;t a java portlet, you don&#39;t need to re-deploy. &amp;nbsp;
&lt;em&gt;More importantly it means you don&#39;t have to wait for a website administrator to deploy it if you cannot deploy yourself!&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt; You can combine presentation (e.g. HTML/JS/CSS) and logic (e.g. Velocity) into the same template, keeping related code together.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Drawbacks:&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Velocity is first and foremost a templating/presentation language. &amp;nbsp;It is not a general purpose computing language, so die hard MVC types will probably dismiss the use of Velocity in this way and call me a heretic/lunatic. &amp;nbsp;It&#39;s great for prototyping though! &amp;nbsp;&lt;/li&gt;
&lt;li&gt; Currently, Structures and Templates aren&#39;t versioned, and they do not participate in Liferay&#39;s Workflow system. &amp;nbsp;So you can&#39;t revert to older (working) versions of templates if you make a mistake.&lt;/li&gt;
&lt;li&gt; No compilation needed - so it&#39;s not as fast as the native bytecode that would result from the equivalent java source code. &amp;nbsp;But it&#39;s still quite fast.&lt;/li&gt;
&lt;li&gt; Velocity and other scripting languages have weird quirks that often cannot be caught except through trial and error, and limitations (e.g. no use of generics) that compiled/strongly typed languages have.&lt;/li&gt;
&lt;li&gt; You can combine presentation (e.g. HTML) and logic (e.g. Velocity) into the same template :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
In my opinion, Liferay WCM is a very good solution for app prototyping or for non-trivial apps that don&#39;t have tons of logic or page flows in them. &amp;nbsp;You have already seen an example of this in the
&lt;a href=&quot;/web/james.falkner/blog/-/blogs/10616492&quot;&gt;Community Activity Map&lt;/a&gt;
, and the example I use below forms the basis for the
&lt;strong&gt;Hot Topics&lt;/strong&gt;
app that you can now see on
&lt;a href=&quot;http://liferay.org&quot;&gt;liferay.org&lt;/a&gt;
.
&lt;/p&gt;
&lt;h1&gt; Basic Template Template&lt;/h1&gt;
&lt;p&gt; To get started creating an app of this nature, you need to start with simple Web Content Template that is itself a template:&lt;/p&gt;
&lt;pre&gt;
#if ($request.lifecycle == &quot;RENDER_PHASE&quot;)
&lt;strong&gt; ## This phase will handle the presentation code (i.e. HTML/CSS/JS). Any calls ## to the ${request.resource-url} will retrieve the result of evaluating the below ## RESOURCE_PHASE below. &lt;/strong&gt;
#elseif ($request.lifecycle == &quot;RESOURCE_PHASE&quot;)
&lt;strong&gt; ## This phase will handle the AJAX request like a portlet&#39;s serveResource() method &lt;/strong&gt;
#end
&lt;/pre&gt;
&lt;p&gt;
So decide what needs to be executed on the server side, and put it in the
&lt;code&gt;RESOURCE_PHASE&lt;/code&gt;
. &amp;nbsp;This is typically where most if not all of the business (i.e. non-presentation) logic goes. &amp;nbsp;Put the presentation logic in the
&lt;code&gt;RENDER_PHASE&lt;/code&gt;
.
&lt;/p&gt;
&lt;h1&gt; Hot Topics Example&lt;/h1&gt;
&lt;p&gt;
For this app, I want to show which threads have the most posts in the last week. &amp;nbsp;So, I needed to query Liferay&#39;s Message Boards. &amp;nbsp;Since there is no
&lt;code&gt;getMostActiveThreadsInTheLastWeek()&lt;/code&gt;
method (I know.. what&#39;s up with that??), I needed a custom query. &amp;nbsp;This means using Liferay&#39;s
&lt;a href=&quot;http://www.liferay.com/community/wiki/-/wiki/Main/Queries+2%3A+DynamicQuery+API&quot;&gt;DynamicQuery&lt;/a&gt;
feature. &amp;nbsp;But from Velocity? &amp;nbsp;Turns out it&#39;s not that bad. &amp;nbsp;Here&#39;s the full
&lt;code&gt;RESOURCE_PHASE&lt;/code&gt;
code to create and execute a Dynamic Query, and generate a JSON object as a result which contains the most active threads in the last week:
&lt;/p&gt;
&lt;pre&gt;#set ($portletNamespace = $request.portlet-namespace) #set ($scopeGroupId = $getterUtil.getLong($request.theme-display.scope-group-id)) #if ($request.lifecycle == &quot;RENDER_PHASE&quot;) ## bunch of display logic to show the JSON result nicely #elseif ($request.lifecycle == &quot;RESOURCE_PHASE&quot;) #set ($logFactory = $portal.getClass().forName(&#39;com.liferay.portal.kernel.log.LogFactoryUtil&#39;)) #set ($log = $logFactory.getLog(&#39;mylog&#39;)) #set ($portalBeanLocator = $portal.getClass().forName(&quot;com.liferay.portal.kernel.bean.PortalBeanLocatorUtil&quot;)) #set ($jsonFactory = $portalBeanLocator.locate(&quot;com.liferay.portal.kernel.json.JSONFactoryUtil&quot;)) #set ($mbMessageLocalService = $portalBeanLocator.locate(&quot;com.liferay.portlet.messageboards.service.MBMessageLocalService.velocity&quot;)) #set ($mbThreadLocalService = $portalBeanLocator.locate(&quot;com.liferay.portlet.messageboards.service.MBThreadLocalService.velocity&quot;)) #set ($calClass = $portal.getClass().forName(&quot;java.util.GregorianCalendar&quot;)) #set ($mbMessageClass = $portal.getClass().forName(&quot;com.liferay.portlet.messageboards.model.MBMessage&quot;)) #set ($mbThreadClass = $portal.getClass().forName(&quot;com.liferay.portlet.messageboards.model.MBThread&quot;)) #set ($dqfu = $portal.getClass().forName(&quot;com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil&quot;)) #set ($pfu = $portal.getClass().forName(&quot;com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil&quot;)) #set ($ofu = $portal.getClass().forName(&quot;com.liferay.portal.kernel.dao.orm.OrderFactoryUtil&quot;)) #set ($now = $calClass.getInstance()) #set ($weeksago = $calClass.getInstance()) #set ($prevweeks = 0 - $getterUtil.getInteger($period.data)) #set ($V = $weeksago.add(3, $prevweeks)) #set ($q = $dqfu.forClass($mbThreadClass)) #set ($rfu = $portal.getClass().forName(&quot;com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil&quot;)) #set ($groupIdCriteria = $rfu.ne(&quot;categoryId&quot;, $getterUtil.getLong(&quot;-1&quot;))) #set ($V = $q.add($groupIdCriteria)) #set ($groupIdCriteria = $rfu.eq(&quot;groupId&quot;, $getterUtil.getLong($scopeGroupId))) #set ($V = $q.add($groupIdCriteria)) #set ($companyIdCriteria = $rfu.eq(&quot;companyId&quot;, $getterUtil.getLong($companyId))) #set ($V = $q.add($companyIdCriteria)) #set ($statusCriteria = $rfu.eq(&quot;status&quot;, 0)) #set ($V = $q.add($statusCriteria)) #set ($lastPostDateCriteria = $rfu.between(&quot;lastPostDate&quot;, $weeksago.getTime(), $now.getTime())) #set ($V = $q.add($lastPostDateCriteria)) #set ($V = $q.setProjection($pfu.property(&quot;threadId&quot;))) #set ($res1 = $mbMessageLocalService.dynamicQuery($q)) #set ($q2 = $dqfu.forClass($mbMessageClass)) #set ($inCriteria = $rfu.in(&quot;threadId&quot;, $res1)) #set ($V = $q2.add($inCriteria)) #set ($createDateCriteria = $rfu.between(&quot;createDate&quot;, $weeksago.getTime(), $now.getTime())) #set ($V = $q2.add($createDateCriteria)) #set ($V = $q2.setProjection($pfu.projectionList().add($pfu.groupProperty(&quot;rootMessageId&quot;)).add($pfu.alias($pfu.rowCount(), &quot;msgCount&quot;)))) #set ($V = $q2.addOrder($ofu.desc(&quot;msgCount&quot;))) #set ($V = $q2.setLimit(0, 7)) #set ($res2 = $mbMessageLocalService.dynamicQuery($q2)) #set ($jsonArray = $jsonFactory.createJSONArray()) #foreach ($msgSum in $res2) #set ($rootMsgId = $msgSum.get(0)) #set ($msgCount = $msgSum.get(1)) #set ($subject = $mbMessageLocalService.getMessage($rootMsgId).getSubject()) #set ($jsonObject = $jsonFactory.createJSONObject()) #set ($V = $jsonObject.put(&quot;subject&quot;, $stringUtil.shorten($htmlUtil.escape($subject), 55))) #set ($V = $jsonObject.put(&quot;msgid&quot;, $rootMsgId)) #set ($V = $jsonObject.put(&quot;msgCount&quot;, $msgCount)) #set ($V = $jsonArray.put($jsonObject)) #end { &quot;jsonArray&quot;: $jsonArray } #end &lt;/pre&gt;
&lt;h1&gt; Details&lt;/h1&gt;
&lt;p&gt; There are many things going on here:&lt;/p&gt;
&lt;h3&gt; Velocity Debugging/Logging&lt;/h3&gt;
&lt;pre&gt; #set ($logFactory = $portal.getClass().forName(&#39;com.liferay.portal.kernel.log.LogFactoryUtil&#39;)) #set ($log = $logFactory.getLog(&#39;mylog&#39;)) &lt;/pre&gt;
&lt;div&gt;
This gives me a way to debug the code by looking at the server log (if you are using this kind of app so that you can bypass your website admin, chances are you won&#39;t have access to the server logs, so this won&#39;t help you). &amp;nbsp;To emit debug info, I can do things like
&lt;code&gt;$log.error($msgCount)&lt;/code&gt;
or
&lt;code&gt;$log.error(&quot;Hi There&quot;).&lt;/code&gt;
&lt;/div&gt;
&lt;div&gt; &amp;nbsp;&lt;/div&gt;
&lt;h3&gt; Creating references for arbitrary JVM classes&lt;/h3&gt;
&lt;div&gt;
&lt;pre&gt; #set ($calClass = $portal.getClass().forName(&quot;java.util.GregorianCalendar&quot;)) &lt;/pre&gt;
&lt;div&gt; This allows me to create references to any class known in the JVM for doing things like calling static methods, etc. &amp;nbsp;Many of these are needed for constructing Dynamic Queries.&lt;/div&gt;
&lt;div&gt; &amp;nbsp;&lt;/div&gt;
&lt;h3&gt; Calculating Now and a Week Ago&lt;/h3&gt;
&lt;div&gt;
&lt;pre&gt; #set ($now = $calClass.getInstance()) #set ($weeksago = $calClass.getInstance()) #set ($prevweeks = 0 - $getterUtil.getInteger($period.data)) #set ($V = $weeksago.add(3, $prevweeks)) &lt;/pre&gt;
&lt;div&gt;
This creates Calendar objects representing the current time, and a week ago. &amp;nbsp;Note that the number of weeks is specified in a web content structure using the
&lt;code&gt;period&lt;/code&gt;
structure element.
&lt;/div&gt;
&lt;div&gt; &amp;nbsp;&lt;/div&gt;
&lt;div&gt; The rest of the code constructs two dynamic queries:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
The first one (
&lt;code&gt;$q&lt;/code&gt;
) queries for
&lt;code&gt;MBThread&lt;/code&gt;
entities that have a
&lt;code&gt;categoryId&lt;/code&gt;
of -1 (MBThreads that do not have a
&lt;code&gt;categoryId&lt;/code&gt;
of -1 are not threads from the message boards portlet, instead they are threads for things like comments on document library entries, etc). &amp;nbsp;The query also includes other criteria, like groupId/companyId must match the &quot;current&quot; groupId/companyId of the site in which the web content is placed, the status must be 0 (indicating it is an approved (i.e. not draft or deleted) entry), and most importantly the
&lt;code&gt;lastPostDate&lt;/code&gt;
must be between my desired time period start and end. &amp;nbsp;Finally, I am not interested in all of the
&lt;code&gt;MBThread&lt;/code&gt;
entity - I just need the
&lt;code&gt;threadId&lt;/code&gt;
. &amp;nbsp;So my query includes a
&lt;a href=&quot;http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html#querycriteria-projection&quot;&gt;Projection&lt;/a&gt;
that only returns the
&lt;code&gt;threadId&lt;/code&gt;
.
&lt;/li&gt;
&lt;li&gt;
The second query (
&lt;code&gt;$q2&lt;/code&gt;
) queries for all
&lt;code&gt;MBMessage&lt;/code&gt;
entities that match my new critieria: they must have a
&lt;code&gt;threadId&lt;/code&gt;
of one of the threads identified in the first query (hence the
&lt;strong&gt;
&lt;code&gt;in&lt;/code&gt;
&lt;/strong&gt;
criteria), and the message&#39;s
&lt;code&gt;createDate&lt;/code&gt;
must also be between my start/end dates. &amp;nbsp;This is to avoid counting messages in the thread that occured before the cutoff dates. &amp;nbsp;Finally, this gem:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre&gt; #set ($V = $q2.setProjection($pfu.projectionList().add($pfu.groupProperty(&quot;rootMessageId&quot;)).add($pfu.alias($pfu.rowCount(), &quot;msgCount&quot;)))) #set ($V = $q2.addOrder($ofu.desc(&quot;msgCount&quot;))) #set ($V = $q2.setLimit(0, 7)) &lt;/pre&gt;
&lt;div&gt;
This creates a projection that is
&lt;em&gt;grouped&lt;/em&gt;
by the
&lt;code&gt;rootMessageId&lt;/code&gt;
, since each message in the same thread will have the same
&lt;code&gt;rootMessageId&lt;/code&gt;
(which I eventually use to construct the URL to the message), and includes a count of the messages that match (with an alias defined so I can refer to the row count when specifying the order of the results via
&lt;code&gt;addOrder()&lt;/code&gt;
). &amp;nbsp;I also limit the results to 7 because I don&#39;t want to show any more than that (this is a simple app). &amp;nbsp;This second query returns a result table that looks like:
&lt;/div&gt;
&lt;div&gt; &amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;table cellspacing=&quot;1&quot; cellpadding=&quot;5&quot; border=&quot;1&quot; style=&quot;width: 60%; &quot;&gt;
&lt;tbody&gt;
&lt;/table&gt;
&lt;p&gt; So after the Dynamic Queries executes, it&#39;s just a matter of constructing a JSONObject (and sanitizing/sizing the actual text of the subject of the thread) and returning it.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt; Liferay WCM and Velocity Gotchas&lt;/h1&gt;
&lt;div&gt;
Velocity is first and foremost a templating/presentation language. &amp;nbsp;It is not a general purpose computing language, so die hard MVC types will probably dismiss the use of Velocity in this way and call me a heretic/lunatic. &amp;nbsp;But it also means that some things are hard (or impossible, for example did anyone catch that I hard-coded
&lt;code&gt;Calendar.MONTH&lt;/code&gt;
to be 3 ? &amp;nbsp;You can&#39;t reference static member variables of a class unless it is already part of the Velocity context in which a template is evaluated). &amp;nbsp;There are many other perils awaiting the adventurous Velocity coder. &amp;nbsp;I learned many things through trial and error (and the help of my IRC friends on the #liferay channel!). &amp;nbsp;Here are some more:
&lt;/div&gt;
&lt;div&gt; &amp;nbsp;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
Don&#39;t forget to use
&lt;code&gt;$var&lt;/code&gt;
instead of
&lt;code&gt;var&lt;/code&gt;
. &amp;nbsp;If you forget the $, you won&#39;t get syntax errors, just silent errors and half of your code will next execute.
&lt;/li&gt;
&lt;li&gt;
If you can use an intelligent IDE (like
&lt;a href=&quot;http://www.jetbrains.com/idea/&quot;&gt;IntelliJ IDEA&lt;/a&gt;
or
&lt;a href=&quot;http://eclipse.org&quot;&gt;Eclipse&lt;/a&gt;
) and its Velocity syntax checking, do it! &amp;nbsp;I saved tons of time by using IntelliJ and declaring variable types, which allowed for autocompletion and type checking. &amp;nbsp;For example, I had tons of these:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;pre&gt;#* @vtlvariable name=&quot;request&quot; type=&quot;java.util.Map&quot; *# #* @vtlvariable name=&quot;httpUtil&quot; type=&quot;com.liferay.portal.kernel.util.HttpUtil&quot; *# #* @vtlvariable name=&quot;htmlUtil&quot; type=&quot;com.liferay.portal.kernel.util.HtmlUtil&quot; *# #* @vtlvariable name=&quot;obc&quot; type=&quot;com.liferay.portal.util.comparator.UserLastNameComparator&quot; *# #* @vtlvariable name=&quot;serviceLocator&quot; type=&quot;com.liferay.portal.velocity.ServiceLocator&quot; *# #* @vtlvariable name=&quot;teamLocalService&quot; type=&quot;com.liferay.portal.service.TeamLocalServiceUtil&quot; *# #* @vtlvariable name=&quot;mbMessageLocalService&quot; type=&quot;com.liferay.portlet.messageboards.service.MBMessageLocalServiceUtil&quot; *# #* @vtlvariable name=&quot;mbThreadLocalService&quot; type=&quot;com.liferay.portlet.messageboards.service.MBThreadLocalServiceUtil&quot; *#&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
Any time you access things from the
&lt;code&gt;${request.theme-display}&lt;/code&gt;
, or access one of your WCM structure fields that represent a number (but are of type &quot;Text&quot; in the template), they are probably not of the the type that you want. &amp;nbsp;You need to use generous amounts of
&lt;code&gt;$getterUtil.getXXX&lt;/code&gt;
calls to make sure. &amp;nbsp;For example,&amp;nbsp;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;#set ($scopeGroupId = $getterUtil.getLong($request.theme-display.scope-group-id)) &lt;/pre&gt;
&lt;div&gt;
will work (and makes&amp;nbsp;
&lt;code&gt;$scopeGroupId&lt;/code&gt;
a Long), whereas
&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;#set ($scopeGroupId = $request.theme-display.scope-group-id) &lt;/pre&gt;
&lt;div&gt; Will results in a $scopeGroupId that is not a Long, and so if you pass it in to a method that is expecting a Long, it won&#39;t work, and will probably silently fail and you&#39;ll be befuddled.&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
If you want to create a new instance of a class (e.g. a HashMap) you can&#39;y say
&lt;code&gt;new HashMap()&lt;/code&gt;
. &amp;nbsp;Velocity does not know what &quot;
&lt;code&gt;new&lt;/code&gt;
&quot; is - after all, you&#39;re using a presentation/templating language, not Java! &amp;nbsp; But we&#39;re using it for more than display. &amp;nbsp;So as a workaround you can do things like
&lt;code&gt;$portal.getClass().forName(&quot;java.util.HashMap&quot;).newInstance()&lt;/code&gt;
.
&lt;/li&gt;
&lt;li&gt;
Accessing elements of an array cannot be done using
&lt;code&gt;$array[0]&lt;/code&gt;
. &amp;nbsp;You have to use&amp;nbsp;
&lt;code&gt;$array.get(0)&lt;/code&gt;
.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt; &amp;nbsp;&lt;/div&gt;
&lt;h1&gt; The Full Source to Hot Topics&lt;/h1&gt;
&lt;div&gt; Here&#39;s the full source, including my display code, and my IntelliJ variable declarations (which may have some unnecessary declarations, but I use this block for other stuff too). &amp;nbsp;If you spot errors or poor coding technique or whatever else, please let me know so I can learn!&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre&gt;#* @vtlvariable name=&quot;portletNamespace&quot; type=&quot;java.lang.String&quot; *# #* @vtlvariable name=&quot;portal&quot; type=&quot;com.liferay.portal.util.Portal&quot; *# #* @vtlvariable name=&quot;getterUtil&quot; type=&quot;com.liferay.portal.kernel.util.GetterUtil&quot; *# #* @vtlvariable name=&quot;stringUtil&quot; type=&quot;com.liferay.portal.kernel.util.StringUtil&quot; *# #* @vtlvariable name=&quot;max-members&quot; type=&quot;com.liferay.portlet.journal.util.TemplateNode&quot; *# #* @vtlvariable name=&quot;team-name&quot; type=&quot;com.liferay.portlet.journal.util.TemplateNode&quot; *# #* @vtlvariable name=&quot;section-members&quot; type=&quot;com.liferay.portlet.journal.util.TemplateNode&quot; *# #* @vtlvariable name=&quot;groupId&quot; type=&quot;java.lang.String&quot; *# #* @vtlvariable name=&quot;sectionMembers&quot; type=&quot;java.lang.String&quot; *# #* @vtlvariable name=&quot;locale&quot; type=&quot;java.util.Locale&quot; *# #* @vtlvariable name=&quot;companyId&quot; type=&quot;java.lang.String&quot; *# #* @vtlvariable name=&quot;scopeGroupId&quot; type=&quot;java.lang.String&quot; *# #* @vtlvariable name=&quot;sectionName&quot; type=&quot;java.lang.String&quot; *# #* @vtlvariable name=&quot;section-name&quot; type=&quot;com.liferay.portlet.journal.util.TemplateNode&quot; *# #* @vtlvariable name=&quot;params&quot; type=&quot;java.util.LinkedHashMap&quot; *# #* @vtlvariable name=&quot;users&quot; type=&quot;java.util.List&quot; *# #* @vtlvariable name=&quot;user&quot; type=&quot;com.liferay.portal.model.User&quot; *# #* @vtlvariable name=&quot;themeDisplay&quot; type=&quot;com.liferay.portal.theme.ThemeDisplay&quot; *# #* @vtlvariable name=&quot;languageUtil&quot; type=&quot;com.liferay.portal.kernel.language.LanguageUtil&quot; *# #* @vtlvariable name=&quot;request&quot; type=&quot;java.util.Map&quot; *# #* @vtlvariable name=&quot;httpUtil&quot; type=&quot;com.liferay.portal.kernel.util.HttpUtil&quot; *# #* @vtlvariable name=&quot;htmlUtil&quot; type=&quot;com.liferay.portal.kernel.util.HtmlUtil&quot; *# #* @vtlvariable name=&quot;obc&quot; type=&quot;com.liferay.portal.util.comparator.UserLastNameComparator&quot; *# #* @vtlvariable name=&quot;serviceLocator&quot; type=&quot;com.liferay.portal.velocity.ServiceLocator&quot; *# #* @vtlvariable name=&quot;teamLocalService&quot; type=&quot;com.liferay.portal.service.TeamLocalServiceUtil&quot; *# #* @vtlvariable name=&quot;mbMessageLocalService&quot; type=&quot;com.liferay.portlet.messageboards.service.MBMessageLocalServiceUtil&quot; *# #* @vtlvariable name=&quot;mbThreadLocalService&quot; type=&quot;com.liferay.portlet.messageboards.service.MBThreadLocalServiceUtil&quot; *# #* @vtlvariable name=&quot;imageToken&quot; type=&quot;com.liferay.portal.kernel.servlet.ImageServletToken&quot; *# #* @vtlvariable name=&quot;userLocalService&quot; type=&quot;com.liferay.portal.service.UserLocalServiceUtil&quot; *# #* @vtlvariable name=&quot;groupIdCriteria&quot; type=&quot;com.liferay.portal.kernel.dao.orm.Criterion&quot; *# #* @vtlvariable name=&quot;groupIdProp&quot; type=&quot;com.liferay.portal.kernel.dao.orm.Property&quot; *# #* @vtlvariable name=&quot;threadMap&quot; type=&quot;java.util.Map&amp;lt;java.lang.Long, java.lang.Integer&amp;gt;&quot; *# #* @vtlvariable name=&quot;q&quot; type=&quot;com.liferay.portal.kernel.dao.orm.DynamicQuery&quot; *# #* @vtlvariable name=&quot;q2&quot; type=&quot;com.liferay.portal.kernel.dao.orm.DynamicQuery&quot; *# #* @vtlvariable name=&quot;rfu&quot; type=&quot;com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil&quot; *# #* @vtlvariable name=&quot;pfu&quot; type=&quot;com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil&quot; *# #* @vtlvariable name=&quot;ofu&quot; type=&quot;com.liferay.portal.kernel.dao.orm.OrderFactoryUtil&quot; *# #* @vtlvariable name=&quot;msgs&quot; type=&quot;java.util.List&amp;lt;com.liferay.portlet.messageboards.model.MBMessage&amp;gt;&quot; *# #set ($portletNamespace = $request.portlet-namespace) #set ($scopeGroupId = $getterUtil.getLong($request.theme-display.scope-group-id)) #if ($request.lifecycle == &quot;RENDER_PHASE&quot;) &amp;lt;body onload=&quot;${portletNamespace}getTable();&quot;&amp;gt; &amp;lt;article&amp;gt; &amp;lt;h1 class=&quot;section-heading section-heading-b&quot;&amp;gt; &amp;lt;div&amp;gt;$title.data&amp;lt;/div&amp;gt; &amp;lt;div class=&quot;section-heading-hr&quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;/h1&amp;gt; &amp;lt;div id=&#39;${portletNamespace}tablediv&#39; style=&#39;width: 85%;&#39;&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;/article&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;script type=&quot;text/javascript&quot;&amp;gt; var ${portletNamespace}table = new Object(); var ${portletNamespace}ICON = &#39;&amp;lt;img class=&quot;icon&quot; \ src=&quot;http://my-liferay-site-cdn.com/osb-theme/images/spacer.png&quot; \ alt=&quot;Message Boards&quot; title=&quot;Message Boards&quot; \ style=&quot; background-image: url(\&#39;/html/icons/_sprite.png\&#39;);\ background-position: 50% -736px; \ background-repeat: no-repeat; height: 16px; width: 16px;&quot;&amp;gt;&#39;; function ${portletNamespace}drawChart() { var html = &#39;&amp;lt;div&amp;gt; \ &amp;lt;table style=&quot;margin-bottom:0em;&quot;&amp;gt; \ &amp;lt;tbody&amp;gt;&#39;; for (i = 0; i &amp;lt; ${portletNamespace}table.length; i++) { html += &#39;&amp;lt;tr&amp;gt; \ &amp;lt;td class=&quot;portlet-icon&quot; style=&quot;padding-right:6px;&quot;&amp;gt; \ &amp;lt;table style=&quot;margin-top:-4px; margin-bottom:0px;&quot;&amp;gt;\ &amp;lt;tr&amp;gt;\ &amp;lt;td&amp;gt;\ &amp;lt;span&amp;gt;&#39; + ${portletNamespace}ICON + &#39;&amp;lt;/span&amp;gt; \ &amp;lt;/td&amp;gt;\ &amp;lt;/tr&amp;gt;\ &amp;lt;tr&amp;gt;\ &amp;lt;td&amp;gt;\ &amp;lt;span style=&quot;color:#908E91; font-size:9px;&quot;&amp;gt;&#39;+ ${portletNamespace}table[i].msgCount + &#39;&amp;lt;/span&amp;gt;\ &amp;lt;/td&amp;gt;\ &amp;lt;/tr&amp;gt;\ &amp;lt;/table&amp;gt;\ &amp;lt;/td&amp;gt; \ &amp;lt;td&amp;gt;\ &amp;lt;div&amp;gt;\ &amp;lt;h3 class=&quot;txt-n fs-11 m-0 o-h&quot;&amp;gt;\ &amp;lt;span class=&quot;display-b m-tn3 m-b6&quot;&amp;gt;\ &amp;lt;a href=&quot;/community/forums/-/message_boards/message/&#39; + ${portletNamespace}table[i].msgid +&#39;&quot;&amp;gt;&#39;+ ${portletNamespace}table[i].subject + &#39;&amp;lt;/a&amp;gt;\ &amp;lt;/span&amp;gt;\ &amp;lt;/h3&amp;gt;\ &amp;lt;/div&amp;gt;\ &amp;lt;/td&amp;gt;\ &amp;lt;/tr&amp;gt;&#39;; } html += &#39;&amp;lt;/tbody&amp;gt;\ &amp;lt;/table&amp;gt;\ &amp;lt;/div&amp;gt;&#39;; document.getElementById(&#39;${portletNamespace}tablediv&#39;).innerHTML = html; } function ${portletNamespace}getTable() { AUI().use( &quot;aui-base&quot;, &quot;aui-io-plugin&quot;, &quot;aui-io-request&quot;, function(A) { A.io.request( &#39;${request.resource-url}&#39;, { data: { }, dataType: &quot;json&quot;, on: { success: function(event, id, obj) { var responseData = this.get(&quot;responseData&quot;); ${portletNamespace}table = responseData.jsonArray || []; ${portletNamespace}drawChart(); }, failure: function(event, id, obj) { } } } ); } ); } &amp;lt;/script&amp;gt; #elseif ($request.lifecycle == &quot;RESOURCE_PHASE&quot;) #set ($logFactory = $portal.getClass().forName(&#39;com.liferay.portal.kernel.log.LogFactoryUtil&#39;)) #set ($log = $logFactory.getLog(&#39;mylog&#39;)) #set ($portalBeanLocator = $portal.getClass().forName(&quot;com.liferay.portal.kernel.bean.PortalBeanLocatorUtil&quot;)) #set ($jsonFactory = $portalBeanLocator.locate(&quot;com.liferay.portal.kernel.json.JSONFactoryUtil&quot;)) #set ($mbMessageLocalService = $portalBeanLocator.locate(&quot;com.liferay.portlet.messageboards.service.MBMessageLocalService.velocity&quot;)) #set ($mbThreadLocalService = $portalBeanLocator.locate(&quot;com.liferay.portlet.messageboards.service.MBThreadLocalService.velocity&quot;)) #set ($calClass = $portal.getClass().forName(&quot;java.util.GregorianCalendar&quot;)) #set ($mbMessageClass = $portal.getClass().forName(&quot;com.liferay.portlet.messageboards.model.MBMessage&quot;)) #set ($mbThreadClass = $portal.getClass().forName(&quot;com.liferay.portlet.messageboards.model.MBThread&quot;)) #set ($dqfu = $portal.getClass().forName(&quot;com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil&quot;)) #set ($pfu = $portal.getClass().forName(&quot;com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil&quot;)) #set ($ofu = $portal.getClass().forName(&quot;com.liferay.portal.kernel.dao.orm.OrderFactoryUtil&quot;)) #set ($now = $calClass.getInstance()) #set ($weeksago = $calClass.getInstance()) #set ($prevweeks = 0 - $getterUtil.getInteger($period.data)) #set ($V = $weeksago.add(3, $prevweeks)) #set ($q = $dqfu.forClass($mbThreadClass)) #set ($rfu = $portal.getClass().forName(&quot;com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil&quot;)) #set ($groupIdCriteria = $rfu.ne(&quot;categoryId&quot;, $getterUtil.getLong(&quot;-1&quot;))) #set ($V = $q.add($groupIdCriteria)) #set ($groupIdCriteria = $rfu.eq(&quot;groupId&quot;, $getterUtil.getLong($scopeGroupId))) #set ($V = $q.add($groupIdCriteria)) #set ($companyIdCriteria = $rfu.eq(&quot;companyId&quot;, $getterUtil.getLong($companyId))) #set ($V = $q.add($companyIdCriteria)) #set ($statusCriteria = $rfu.eq(&quot;status&quot;, 0)) #set ($V = $q.add($statusCriteria)) #set ($lastPostDateCriteria = $rfu.between(&quot;lastPostDate&quot;, $weeksago.getTime(), $now.getTime())) #set ($V = $q.add($lastPostDateCriteria)) #set ($V = $q.setProjection($pfu.property(&quot;threadId&quot;))) #set ($res1 = $mbMessageLocalService.dynamicQuery($q)) #set ($q2 = $dqfu.forClass($mbMessageClass)) #set ($inCriteria = $rfu.in(&quot;threadId&quot;, $res1)) #set ($V = $q2.add($inCriteria)) #set ($createDateCriteria = $rfu.between(&quot;createDate&quot;, $weeksago.getTime(), $now.getTime())) #set ($V = $q2.add($createDateCriteria)) #set ($V = $q2.setProjection($pfu.projectionList().add($pfu.groupProperty(&quot;rootMessageId&quot;)).add($pfu.alias($pfu.rowCount(), &quot;msgCount&quot;)))) #set ($V = $q2.addOrder($ofu.desc(&quot;msgCount&quot;))) #set ($V = $q2.setLimit(0, 7)) #set ($res2 = $mbMessageLocalService.dynamicQuery($q2)) #set ($jsonArray = $jsonFactory.createJSONArray()) #foreach ($msgSum in $res2) #set ($rootMsgId = $msgSum.get(0)) #set ($msgCount = $msgSum.get(1)) #set ($subject = $mbMessageLocalService.getMessage($rootMsgId).getSubject()) #set ($jsonObject = $jsonFactory.createJSONObject()) #set ($V = $jsonObject.put(&quot;subject&quot;, $stringUtil.shorten($htmlUtil.escape($subject), 55))) #set ($V = $jsonObject.put(&quot;msgid&quot;, $rootMsgId)) #set ($V = $jsonObject.put(&quot;msgCount&quot;, $msgCount)) #set ($V = $jsonArray.put($jsonObject)) #end { &quot;jsonArray&quot;: $jsonArray } #end &lt;/pre&gt;
&lt;style type=&quot;text/css&quot;&gt;
p.quote{margin:1em 2em;}pre{background-color:#DDD;border:1px solid #999;font-size:10px;font-family:Courier,monospace;white-space:pre;max-height:300px;padding:5px;overflow:auto;margin-bottom:12px;}span.attr{display:block;text-align:right;font-size:smaller;}span.new{background-color:#bcf;}span.tt{font-family:Courier,monospace;}span.b{font-weight:bold;}span.em{font-style:italic;}span.little{font-size:smaller;}
&lt;/style&gt;
&lt;p&gt; &amp;nbsp;&lt;/p&gt;
source &lt;a href=&quot;http://www.liferay.com/web/james.falkner/blog/-/blogs/12066882&quot;&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/1950656913179129594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/writing-liferay-apps-with-web-content.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/1950656913179129594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/1950656913179129594'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/writing-liferay-apps-with-web-content.html' title='Writing Liferay Apps with Web Content Templates'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-2660412929707150954</id><published>2012-01-12T04:13:00.000-08:00</published><updated>2012-01-12T04:13:23.313-08:00</updated><title type='text'>Changes in Social Equity in Liferay 6.1</title><content type='html'>&lt;div class=&quot;entry-body&quot;&gt;
&lt;p&gt; There have been some pretty interesting and important changes regarding Social Equity for Liferay 6.1. While some of the changes are conceptual and others are additional features, there is one thing that is very important: there has been a change of API.&lt;/p&gt;
&lt;p&gt; The new equity system is now part of the social activity framework. This is not just a naming concept. As part of the change, several functionalities were moved to different services and the original Social Equity services were removed. The whole framework got its own XML descriptor (formerly activities were configured in resource actions descriptors) that can be used to define activities and everything else related to them. This new descriptor can be used to extend already configured activities and can be used in plugins as well.&lt;/p&gt;
&lt;h2&gt; The Goal of the New System&lt;/h2&gt;
&lt;p&gt; While the main goal of being able to measure participation and contribution in a communty hasn&#39;t changed, there are some differences how these values are created and maintained. The new social equity system is now part of a broader scoped social activity framework that is designed to log certain activities as well as provide numerical instruments to monitor actvities or simply to provide the means for statistical analysis.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt; Activity Counters&lt;/h2&gt;
&lt;p&gt;
&lt;p&gt; This system provides the basis for an extendable metrics system for assets and users.&lt;/p&gt;
&lt;h2&gt; Statistical Periods&lt;/h2&gt;
&lt;p&gt; One of the biggest conceptual changes is the introduction of the counter period. Values no longer degrade, rather there is a configurable time interval where points are aggregated resulting in a &quot;current&quot; value for each of these periods. A total value is also maintained. This method suits the human thinking more than the former method of degrading values. We are more used to thinking in periods. We are used to having &quot;employee of the month&quot; or values projected to a certain year - such as balance sheets.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt; Equity Counters&lt;/h2&gt;
&lt;p&gt; The old social equity scores are mostly still there. Fundamentally these values are just counters. Of course there are always those more equals among equals, so equity counters have some special treatment. In addition to the limit system that has been implemented for normal counters these counters have some other checks that for example guard against an asset owner building up its own asset&#39;s popularity and a result his or her own contribution score by doing certain actions on his or her asset.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;h2&gt; API changes&lt;/h2&gt;
&lt;p&gt; One of the most importart API changes is that the triggering of an equity action was moved to the social activity service. In fact, adding a social activity now triggers the new social equity service automatically, so you can simply call one of the addActviity() methods in SocualActivityLocalService and if things are configured and social equity is enabled for the group, everything will be fine. If the activity is configured to be logged, the social activity service will log it the same way it&#39;s been doing so far, so that it can appear in the activities portlet. Additionally it will call new SocialActivityCounterLocalService to trigger counter processing.&amp;nbsp;&lt;/p&gt;
&lt;p&gt; To get the value of a counter (including participation and contribution values as they are handled as counters) you can use the fetchLatestActivityCounter() method of the&amp;nbsp;SocialActivityCounterLocalService. There are additional helper methods to retrieve a list of counters by other criteria, but probably this is the most important method of the service.&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/2660412929707150954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/changes-in-social-equity-in-liferay-61.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/2660412929707150954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/2660412929707150954'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/changes-in-social-equity-in-liferay-61.html' title='Changes in Social Equity in Liferay 6.1'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-1458543676282847712</id><published>2012-01-12T04:05:00.000-08:00</published><updated>2012-01-12T04:05:08.315-08:00</updated><title type='text'>Liferay 6.1 GA1 in the cloud, step by step</title><content type='html'>&lt;div&gt;
&lt;p&gt;
Do you want your new Liferay 6.1 GA1, with all these new functionalities:
&lt;a href=&quot;http://www.liferay.com/es/web/james.falkner/blog/-/blogs/liferay-6-1-ce-release?_33_redirect=http%3A%2F%2Fwww.liferay.com%2Fes%2Fweb%2Fjames.falkner%2Fblog%3Fp_p_id%3D33%26p_p_lifecycle%3D0%26p_p_state%3Dnormal%26p_p_mode%3Dview%26p_p_col_id%3Dcolumn-2%26p_p_col_count%3D1%26_33_struts_action%3D%252Fblogs%252Fview&quot;&gt;english&lt;/a&gt;
and
&lt;a href=&quot;http://www.liferay.com/es/web/francisco.fernandez/blog/-/blogs/12030057&quot;&gt;spanish&lt;/a&gt;
, in the cloud?
&lt;/p&gt;
&lt;p&gt; Follow this simple steps to achieve it, even if you want to use the new Setup Wizard:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Go to Jelastic (
&lt;a target=&quot;_blank&quot; href=&quot;http://www.jelastic.com&quot;&gt;www.jelastic.com&lt;/a&gt;
), create an account depending of your location
&lt;/li&gt;
&lt;li&gt; Create an enviroment: Tomcat + MySQL&lt;/li&gt;
&lt;li&gt;
Upload portal libraries (
&lt;a href=&quot;http://sourceforge.net/projects/lportal/files/Liferay%20Portal/6.1.0%20GA1/liferay-portal-client-6.1.0-ce-ga1-20120106155615760.zip/download&quot;&gt;portal-client&lt;/a&gt;
and
&lt;a href=&quot;http://sourceforge.net/projects/lportal/files/Liferay%20Portal/6.1.0%20GA1/liferay-portal-dependencies-6.1.0-ce-ga1-20120106155615760.zip/download&quot;&gt;dependencies&lt;/a&gt;
) to SERVER/lib.
&lt;/li&gt;
&lt;li&gt;
Upload WAR file from sourceforge (
&lt;a href=&quot;http://sourceforge.net/projects/lportal/files/Liferay%20Portal/6.1.0%20GA1/liferay-portal-6.1.0-ce-ga1-20120106155615760.war/download&quot;&gt;here&lt;/a&gt;
) (Jelastic make it easy that uploading, because directly links to that WAR file)
&lt;/li&gt;
&lt;li&gt;
Create portal-ext.properties at SERVER, with this values:
&lt;ul&gt;
&lt;li&gt;
&lt;pre&gt;
resource.repositories.root=${user.home}/
&lt;strong&gt;ENVIROMENT_NAME&lt;/strong&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;include-and-override=${liferay.home}/portal-setup-wizard.properties&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;
liferay.home=${user.home}/
&lt;strong&gt;ENVIROMENT_NAME&lt;/strong&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;
jdbc.default.jndi.name=
&lt;strong&gt;jdbc/LiferayPool&lt;/strong&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Modify SERVER/context.xml file with this values (note that the &quot;mysql-&quot; is very important at db url):
&lt;ul&gt;
&lt;li&gt;
&lt;pre&gt;
&amp;lt;Resource name=&quot;
&lt;strong&gt;jdbc/LiferayPool&lt;/strong&gt;
&quot; auth=&quot;Container&quot; type=&quot;javax.sql.DataSource&quot; maxActive=&quot;100&quot; maxIdle=&quot;30&quot; maxWait=&quot;10000&quot; username=&quot;
&lt;strong&gt;USER&lt;/strong&gt;
&quot; password=&quot;
&lt;strong&gt;PASSWORD&lt;/strong&gt;
&quot; driverClassName=&quot;com.mysql.jdbc.Driver&quot; url=&quot;jdbc:mysql://
&lt;strong&gt;mysql-ENVIROMENT_NAME&lt;/strong&gt;
.jelastic.com/
&lt;strong&gt;DATABASE_NAME&lt;/strong&gt;
?useEncoding=true&amp;amp;amp;characterEncoding=UTF-8&quot; /&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; Clean catalina.out log to be sure that your installation is successfull.&lt;/li&gt;
&lt;li&gt; Restart server.&lt;/li&gt;
&lt;li&gt; Check in catalina.out that Liferay starts reading your portal-ext&lt;/li&gt;
&lt;li&gt; Browse to you portal: ENVIROMENT_NAME.jelastic.com&lt;/li&gt;
&lt;li&gt; Setup Wizard is the first thing you&#39;ll see, but as JNDI is configured, we cannot modify database settings. We should go to SERVER/context.xml for database changes.&lt;/li&gt;
&lt;li&gt; Set up for portal (name, language, admin credentials), and...&lt;/li&gt;
&lt;li&gt; Here it is! Your portal up and running!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt; Then, you can tune your portal with portal-ext reminding not to modify properties set in this blog.&lt;/p&gt;
&lt;h4&gt; Importants (and new things):&lt;/h4&gt;
&lt;p&gt; As you can see, we are taking care of telling setup wizard where to read the new props file (the include-an-override property), and we are also configuring database with JNDI, but of course you can do it with JDBC, just with the usual way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;pre&gt;jdbc.default.driverClassName=com.mysql.jdbc.Driver&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;jdbc.default.url=jdbc:mysql://mysql-ENVIROMENT_NAME/database_name?&lt;p&gt;useUnicode=true&amp;amp;characterEncoding=UTF-8&amp;amp;useFastDateParsing=false&lt;/p&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;jdbc.default.username=user&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;jdbc.default.password=password&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; Hope it helps!&lt;/p&gt;
&lt;p&gt; Himanshu&lt;/p&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/1458543676282847712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-61-ga1-in-cloud-step-by-step.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/1458543676282847712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/1458543676282847712'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-61-ga1-in-cloud-step-by-step.html' title='Liferay 6.1 GA1 in the cloud, step by step'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-3829218439506145164</id><published>2012-01-09T02:31:00.000-08:00</published><updated>2012-01-10T23:48:32.004-08:00</updated><title type='text'>Liferay 6.1 CE released - A first brief review!</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div id=&quot;header&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h1&gt;


Liferay 6.1 CE released - A first brief review!&lt;/h1&gt;
Its a new year for a new chance to get better in all that things we failed or where we couldn´t gettin better in the past time.&lt;br /&gt;
This belongs not only to us but also to our near business partners as
 well. As that said Liferay does worked out my new-year-call in a pretty
 short time with Liferay 6.1 CE which has been released recently.&lt;br /&gt;
Are you still on Liferay 6.X or lower? Lets migrate your solutions 
for your customers on sunday to Liferay 6.1 because there are many fancy
 things around there… i smell something good here and i guess this has 
something todo with Liferay.&lt;br /&gt;
&lt;h3&gt;


Notice: the next week i will create a review about the 
CMIS-Interface of Liferay 6.1. I will test it against Alfresco! Stay 
tuned!&lt;/h3&gt;
At a glance - all is gettin good - at least at the very end. Until then we see how we can make better our current situation.&lt;br /&gt;
&lt;h3&gt;


 In Advance: Many “small” killer changes!&lt;/h3&gt;
&lt;a class=&quot;thickbox&quot; href=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/Bildschirmfoto%202012-01-07%20um%2021.20.00.png&quot; rel=&quot;liferay-6.1-CA&quot; style=&quot;float: left;&quot; title=&quot;First Start Part 1: The user has to configure inital portal properties&quot;&gt;&lt;img alt=&quot;First Start Part 1: The user has to configure inital portal properties&quot; src=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/thumbs/thumbs_Bildschirmfoto%202012-01-07%20um%2021.20.00.png&quot; style=&quot;height: 75px; width: 100px;&quot; title=&quot;First Start Part 1: The user has to configure inital portal properties&quot; /&gt;&lt;/a&gt;Firstly,
 if you start Liferay at the very first time you have to talk with 
Liferay about your taste regarding initial portal-settings which will be
 stored in a separated file called wizard.properties. Some initial 
properties like portals-name can be passed on it here.&lt;br /&gt;
&lt;a class=&quot;thickbox&quot; href=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/Bildschirmfoto%202012-01-07%20um%2021.26.11.png&quot; rel=&quot;liferay-6.1-CA&quot; style=&quot;float: right;&quot; title=&quot;More actions available through the dockbars. For instance the action &quot;&gt;&lt;img alt=&quot;More actions available through the dockbars. For instance the action \&quot; src=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/thumbs/thumbs_Bildschirmfoto%202012-01-07%20um%2021.26.11.png&quot; style=&quot;height: 75px; width: 100px;&quot; title=&quot;More actions available through the dockbars. For instance the action \&quot; /&gt;&lt;/a&gt;
 If you have reached the main page you see at a glance that the UI has 
been slightly enhanced and looks more clearly since 6.0. If you going 
through the dockbar-actions on the top you might imagine some new 
actions right there.&lt;br /&gt;
&lt;a class=&quot;thickbox&quot; href=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/Bildschirmfoto%202012-01-07%20um%2021.36.34.png&quot; rel=&quot;liferay-6.1-CA&quot; style=&quot;float: left;&quot; title=&quot;Enhanced Social Equity: The Settings are more feasable as in Liferay 6.0. For those who dont know: this functionality enables more spice &amp;amp; taste to your social life. Each user can get points for several actions wich points out their contribution-value. &quot;&gt;&lt;img alt=&quot;Enhanced Social Equity: The Settings are more feasable as in Liferay 6.0. For those who dont know: this functionality enables more spice &amp;amp; taste to your social life. Each user can get points for several actions wich points out their contribution-value. &quot; src=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/thumbs/thumbs_Bildschirmfoto%202012-01-07%20um%2021.36.34.png&quot; style=&quot;height: 75px; width: 100px;&quot; title=&quot;Enhanced Social Equity: The Settings are more feasable as in Liferay 6.0. For those who dont know: this functionality enables more spice &amp;amp; taste to your social life. Each user can get points for several actions wich points out their contribution-value. &quot; /&gt;&lt;/a&gt;Especilly
 the control-panel (the action has been moved to the “Go To” actions) 
has been completely refined. Many “small eyes changes”(which were surely
 big in their development) have been done. For instance, the Social 
Equity feature says more clearly what settings we can change here and 
which consequenes collaboration-actions can have on user-listings (Top 
Users Dashlet, Ranking etc.).&lt;br /&gt;
A new nice feature is the ability to get a first imaginatine on how 
REST-Services can be called. Therfore Liferay introduces a 
developer-page where you can see and test REST-Services directly in the 
browser.&lt;br /&gt;
&lt;a class=&quot;thickbox&quot; href=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/Bildschirmfoto%202012-01-07%20um%2021.37.31.png&quot; rel=&quot;liferay-6.1-CA&quot; title=&quot;Web Service Dictionary enables you to see directly in the browser which REST-Calls exists, how you can use these service for your own AND ...&quot;&gt;&lt;img alt=&quot;Web Service Dictionary enables you to see directly in the browser which REST-Calls exists, how you can use these service for your own AND ...&quot; src=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/thumbs/thumbs_Bildschirmfoto%202012-01-07%20um%2021.37.31.png&quot; style=&quot;height: 75px; width: 100px;&quot; title=&quot;Web Service Dictionary enables you to see directly in the browser which REST-Calls exists, how you can use these service for your own AND ...&quot; /&gt;&lt;/a&gt;&lt;a class=&quot;thickbox&quot; href=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/Bildschirmfoto%202012-01-07%20um%2021.38.29.png&quot; rel=&quot;liferay-6.1-CA&quot; title=&quot;... performing test through a WEB-GUI. Do you want any more? ;-)&quot;&gt;&lt;img alt=&quot;... performing test through a WEB-GUI. Do you want any more? ;-)&quot; src=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/thumbs/thumbs_Bildschirmfoto%202012-01-07%20um%2021.38.29.png&quot; style=&quot;height: 75px; width: 100px;&quot; title=&quot;... performing test through a WEB-GUI. Do you want any more? ;-)&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;


Do Document-Management, hurry up!&lt;/h3&gt;
As im a longterm ECM-Specialist my personal passion belongs to 
document-mangement. I just loving to increase productivity, lower 
overhead on customersite. Now you are able to perform better 
document-management practices with Liferay. You are now able to create 
custom datatypes with custom metadata. Your metadata can have text, 
date, number, associations as attributes with multilanguage support - 
its just the Liferay-Way! &lt;a class=&quot;thickbox&quot; href=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/Bildschirmfoto%202012-01-07%20um%2022.01.57.png&quot; rel=&quot;liferay-6.1-CA&quot; style=&quot;float: left;&quot; title=&quot;Managing own datatypes, properties and metadata-sets (like Alfresco-Aspects). See in the next photo the result of that new document type in real ... &quot;&gt;&lt;img alt=&quot;Managing own datatypes, properties and metadata-sets (like Alfresco-Aspects). See in the next photo the result of that new document type in real ... &quot; src=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/thumbs/thumbs_Bildschirmfoto%202012-01-07%20um%2022.01.57.png&quot; style=&quot;height: 75px; width: 100px;&quot; title=&quot;Managing own datatypes, properties and metadata-sets (like Alfresco-Aspects). See in the next photo the result of that new document type in real ... &quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Look at the first picture. Ive created my own datatype called “Offer”
 with my own attributes. On applying this documenttype on a new document
 you can see in the image how it feels like: &lt;a class=&quot;thickbox&quot; href=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/Bildschirmfoto%202012-01-07%20um%2022.03.44.png&quot; rel=&quot;liferay-6.1-CA&quot; title=&quot;... my own document type ... without an coding.&quot;&gt;&lt;img alt=&quot;... my own document type ... without an coding.&quot; src=&quot;http://portal.krypthonas.de/wp-content/gallery/liferay-61-ca/thumbs/thumbs_Bildschirmfoto%202012-01-07%20um%2022.03.44.png&quot; style=&quot;height: 75px; width: 100px;&quot; title=&quot;... my own document type ... without an coding.&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
As you can see - a webpreview will be created as well. Do you want any more for Liferay 6.1?&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/3829218439506145164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-61-ce-released-first-brief.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/3829218439506145164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/3829218439506145164'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-61-ce-released-first-brief.html' title='Liferay 6.1 CE released - A first brief review!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-167957482026132146</id><published>2012-01-08T23:39:00.000-08:00</published><updated>2012-01-08T23:39:09.913-08:00</updated><title type='text'>Liferay 6.1 CE released</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;asset-link-content&quot;&gt;
 &lt;div class=&quot;asset-full-content no-title&quot;&gt;
 &lt;div class=&quot;asset-content&quot;&gt;
 &lt;div class=&quot;journal-content-article&quot;&gt;
 &lt;h1&gt;
Introduction to Liferay&lt;/h1&gt;
Liferay is a &lt;em&gt;portal server&lt;/em&gt;.
 This means that it is designed to be a single environment where all of 
the applications a user needs can run, and these are integrated together
 in a consistent and systematic way. If an application lives outside the
 portal, the portal should be able to consume some resource of the 
application (such as an RSS feed or a subset of functionality in a 
&quot;dashboard&quot; application) so that the end user can see everything he or 
she interacts with at a glance.&lt;br /&gt;
 To achieve this, all the application functionality within Liferay Portal resides in fragments of the page called &lt;em&gt;portlets&lt;/em&gt;.
 Portlets are web applications that run in a portion of a web page. 
Liferay&#39;s core is a portlet container that aggregates portlets on 
particular pages and displays them to users. In this way, one or many 
applications can reside on a page, and users can (at the administrator&#39;s
 discretion) arrange them however they like.&lt;br /&gt;
 Portlet 
applications, like servlet applications, are defined by a Java standard 
which various portal server vendors have implemented. The Java standard 
defines the portlet specification. A JSR-168 or JSR-286 standard portlet
 should be deployable on any portlet container which supports those 
standards. Portlets are placed on the page in a certain order by the end
 user and are served up dynamically by the portal server.&lt;br /&gt;
 Portal 
applications generally come in two flavors: 1) multiple portlets which 
only provide small amounts of functionality individually, but are 
aggregated by the portal server into a larger application, or 2) whole 
applications which reside in only one application window. The choice is 
up to the application designers. Only developers have to worry about 
what happens inside the portlet itself. The portal server handles 
building out the page as it is presented to users.&lt;br /&gt;
 Portlets are 
not difficult to build, and Java standard portlets can be written by any
 Java developer with experience in writing web applications. Liferay 
provides a Plugins Software Development Kit that makes it easy to design
 new portlet projects, as well as a development environment based on 
Eclipse. For further information about the Plugins SDK, please see &lt;em&gt;Liferay Developer&#39;s Guide&lt;/em&gt;, which is the companion volume to this one, or &lt;a href=&quot;http://manning.com/sezov&quot;&gt;&lt;em&gt;Liferay in Action&lt;/em&gt;&lt;/a&gt;,
 published by Manning Publications, which is the official guide to 
Liferay development. For further information on Liferay&#39;s developer 
tools, see &lt;a href=&quot;http://www.liferay.com/downloads/liferay-projects/liferay-ide&quot;&gt;http://www.liferay.com/downloads/liferay-projects/liferay-ide&lt;/a&gt;.&lt;br /&gt;
 Additionally,
 Liferay supports portlets written in other programming languages, such 
as PHP, Ruby, Groovy, or Python. Sample portlets written in these 
languages are available from Liferay&#39;s public plugin repository on 
Github at &lt;a href=&quot;https://github.com/liferay/liferay-plugins&quot;&gt;https://github.com/liferay/liferay-plugins&lt;/a&gt;.&lt;br /&gt;
 We discuss the following topics in this chapter:&lt;br /&gt;
 &lt;ul&gt;
&lt;li&gt;&lt;em&gt;Liferay&#39;s User Interface:&lt;/em&gt; How to navigate around Liferay&lt;br /&gt;
 &lt;/li&gt;
&lt;li&gt;&lt;em&gt;Navigating the Control Panel:&lt;/em&gt; An overview of Liferay&#39;s control panel&lt;br /&gt;
 &lt;/li&gt;
&lt;li&gt;&lt;em&gt;Portal Architechture:&lt;/em&gt; How Liferay organizes your portal&lt;br /&gt;
 &lt;/li&gt;
&lt;/ul&gt;
Navigation within Liferay Portal is designed to be intuitive and easy. Let&#39;s get started.&lt;br /&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;asset-metadata&quot;&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;toc&quot;&gt;
&lt;li class=&quot;toc-item toc-item-1&quot;&gt; &lt;a class=&quot;toc-link-1&quot; href=&quot;http://www.liferay.com/documentation/liferay-portal/6.1/user-guide/-/ai/navigating-liferay&quot;&gt;Navigating Liferay&lt;/a&gt; &lt;/li&gt;
&lt;li class=&quot;toc-item toc-item-1&quot;&gt; &lt;a class=&quot;toc-link-1&quot; href=&quot;http://www.liferay.com/documentation/liferay-portal/6.1/user-guide/-/ai/navigating-the-control-pan-2&quot;&gt;Navigating the Control Panel&lt;/a&gt; &lt;/li&gt;
&lt;li class=&quot;toc-item toc-item-1&quot;&gt; &lt;a class=&quot;toc-link-1&quot; href=&quot;http://www.liferay.com/documentation/liferay-portal/6.1/user-guide/-/ai/portal-architectu-5&quot;&gt;Portal Architecture&lt;/a&gt; &lt;/li&gt;
&lt;li class=&quot;toc-item toc-item-1&quot;&gt; &lt;a class=&quot;toc-link-1&quot; href=&quot;http://www.liferay.com/documentation/liferay-portal/6.1/user-guide/-/ai/summ-23&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;a href=&quot;http://www.liferay.com/documentation/liferay-portal/6.1/user-guide&quot; target=&quot;_blank&quot;&gt;Refer here for details :-liferay 6.1 CE GA&lt;/a&gt;&lt;br /&gt;
 &lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/167957482026132146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-61-ce-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/167957482026132146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/167957482026132146'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-61-ce-released.html' title='Liferay 6.1 CE released'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-3714523328462116075</id><published>2012-01-08T23:32:00.000-08:00</published><updated>2012-01-08T23:32:24.945-08:00</updated><title type='text'>Liferay Logical Architecture</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2 style=&quot;text-align: justify;&quot;&gt;
Liferay Architecture&lt;/h2&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
Enterprise Layer&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
The
 enterprise layer forms the top layer of services and components that 
are grouped into taxonomies which support and realize enterprise 
functions such as Portal Management, Content Management, Workflow 
Management, Document Management, User Management, Security Management. 
&amp;nbsp;The Enterpise Layer is also comprised of inter related service 
components and features such as Personalization, Collaboration, Social 
Networking, Delivery Channels, Virtualization and Tunneling Servlets. 
These form the basic backbone or core enterprise features of Liferay.&lt;/div&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
Service Layer&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;img align=&quot;left&quot; alt=&quot;&quot; height=&quot;150&quot; src=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=36754047-1ad2-47ae-bac5-51944cc48bbf&amp;amp;groupId=3802503&amp;amp;t=1297080530905&quot; width=&quot;146&quot; /&gt;Liferay
 follows a Model Driven Architecture approach. &amp;nbsp;In the traditional sense
 it requires a Platform Independent Model (PIM) from which we derive and
 Platform Specific Model (PSM) and subsequently generate implementation 
logic. &amp;nbsp;In Liferay however, we begin with a Domain Specific Model(DSM) 
since the root model is only specific to Liferay domain and it defines 
all the nouns of the system with their interactions and is translated to
 a Platform Specific Model(PSM) which constitutes the EJB’s, Spring 
Framework, Hibernate Layer, Web Services and then generates the 
implementation classes by extending the appropriate services. &amp;nbsp;This is 
made possible due to the implementation of Service Builder which is the 
most integral tool provided by Liferay and enforces the same standards 
throughout. &amp;nbsp;The services builder is the Model Driven Transformation 
(MDT) Tool in this context.&lt;/div&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
Extensions Framework&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Liferay
 Provides extensions framework by use of an Extension Environment and 
Plugins Framework. &amp;nbsp;The extension environment has the same directory 
structure of the Liferay and was implemented by overriding the existing 
source files by placing them in the same path. &amp;nbsp;The design also 
incorporated multiple –ext.properties file to change default settings of
 the portal by overriding desired properties in the –ext.properties 
file. &amp;nbsp;The best approach is the hot deployable plugin framework which 
provided a number of wizards to construct portlets, themes, layouts and 
hooks or interceptors, and now provides an ext-plugin which provides a 
similar offset by only replicating those flies that require modification
 without the entire portal content. &amp;nbsp;The Plugins approach provides both 
an IDE and command line interface. &amp;nbsp;The IDE takes a wizard approach to 
create portlets, themes, layouts and hooks. &amp;nbsp;The hooks are basically 
interceptors can be categorized into model hooks, JSP hooks, properties 
hook, event hooks. &amp;nbsp;Model hooks deal with interception of entity actions
 in services, JSP hooks are provided to dynamically modify Liferay JSP 
pages, the event hook is used to intercept portal events, property hook 
is used to update the Liferay properties. &amp;nbsp;The ext-hook plugin is a new 
feature than provides changes to the Liferay structure and can be hot 
deployed at runtime.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
Logical Architecture of Liferay&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Liferay
 supports Windows, Mac and Linux OS. &amp;nbsp;JRE is installed on the supported 
OS to host the JVM. &amp;nbsp;An application server is required to contain the 
Liferay instance. &amp;nbsp;The officially supported servers include, but not 
limited to Apache Tomcat, Glassfish, Geronimo, Jetty, JOnAS, JBoss, and 
Resin. &amp;nbsp;Most of these servers are available as bundled versions for 
download and are deployed in the JVM container. &amp;nbsp;The server provides 
connectivity and interoperability using an Enterprise Service Bus (ESB),
 and there are multiple services offered by the servers which are 
leveraged by Liferay. &amp;nbsp;Some of the services, which are primarily used by
 Liferay on the Application server, include the following: JNDI, JDBC, 
JTS, JMS, JAAS, JDO, JWS, JSP/Servlets, JavaMail. &amp;nbsp;Applications can be 
deployed on the server like SOLR Search engine, or DROOLS Rule Engine, 
or Tunneling Servlets which can further provide extension or integration
 of external applications with Liferay. &amp;nbsp;Liferay uses a number of 
technologies at its core to offer the various services. &amp;nbsp;These 
technologies include EJB, Hibernate, Spring and JBPM. &amp;nbsp;Liferay 
implements Lucene Search Engine by default and can be configured to 
extend the SOLR Search Engine which is built on Lucene to extend 
capabilities to provide clustering, faceted search, filtering with 
additional enhancements and scalability. &amp;nbsp; A Portlet Bridge is provided 
to deploy JSR 168/286 portlets and supports RIA applications. &amp;nbsp;Liferay 
contains Language adaptors such as for Python, Ruby and PHP which allows
 easy integration.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
The 
Administration Kernel provides the base framework for integration and 
support of all modules, with tooling support, wizards, service 
providers, listeners and runtime configuration parameters to tweak the 
application server in runtime mode. &amp;nbsp;The services builder provides the 
basic framework to construct and deploy the services using a Model 
Driven Development (MDD) approach. &amp;nbsp;The portlet plug-in leverages on the
 portlet bridge to provide dynamically generated portlets to the end 
users and enhanced RIA integration. &amp;nbsp;The hooks plug-in provide 
convenient access to intercept and alter the services and functionality 
of the Liferay instance in a standardized approach.By leveraging on all 
the services and features extended by Liferay, a robust Enterprise 
Services layer resides on atop of this providing extended solutions 
ranging from Portal Management, Web Content Management, Enterprise 
Content Management, Document Management, User Management, Workflow 
Management, Security Management. &amp;nbsp;These in turn provide features such as
 Personalization, Collaboration, Virtualization, Social Networking and 
integrates Dynamic Delivery Channels, and Tunneling Services.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&amp;nbsp;&lt;img alt=&quot;Liferay Logical Architecture Diagram&quot; height=&quot;281&quot; src=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=33437cc3-bfee-4f4b-b931-ce8ac7b9b1dc&amp;amp;groupId=3802503&amp;amp;t=1297148774663&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/h2&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/3714523328462116075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-logical-architecture.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/3714523328462116075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/3714523328462116075'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-logical-architecture.html' title='Liferay Logical Architecture'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-383110369277103400</id><published>2012-01-06T00:03:00.001-08:00</published><updated>2012-01-06T00:03:40.785-08:00</updated><title type='text'>Add search in theme in LIFERAY</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Steps to add search in theme:&lt;br /&gt;&lt;br /&gt;1. Open file [LIFRAY_SDK]/themes/{theme-name}/docroot/_diffs/templates/portal_normal.vm&lt;br /&gt;&lt;br /&gt;2. Add $theme.search() at your desired location.&lt;br /&gt;&lt;br /&gt;3. Build and deploy the theme.&lt;br /&gt;&lt;br /&gt;4. A search text box will appear where the code was placed&lt;br /&gt;Steps to customize the search:&lt;br /&gt;&lt;br /&gt;In case you need to customize the search functionality to search only specific content types, follow the steps below.&lt;br /&gt;&lt;br /&gt;1. Open file [LIFERAY_HOME]/tomcat-6.0.26/webapps/ROOT/WEB-INF/classes/portal-ext.properties&lt;br /&gt;&lt;br /&gt;2. Add following lines:&lt;br /&gt;&lt;br /&gt;com.liferay.portlet.blogs.util.BlogsOpenSearchImpl=true&lt;br /&gt;&lt;br /&gt;com.liferay.portlet.bookmarks.util.BookmarksOpenSearchImpl=true&lt;br /&gt;&lt;br /&gt;com.liferay.portlet.calendar.util.CalendarOpenSearchImpl=true&lt;br /&gt;&lt;br /&gt;com.liferay.portlet.directory.util.DirectoryOpenSearchImpl=true&lt;br /&gt;&lt;br /&gt;com.liferay.portlet.documentlibrary.util.DLOpenSearchImpl=true&lt;br /&gt;&lt;br /&gt;com.liferay.portlet.imagegallery.util.IGOpenSearchImpl=true&lt;br /&gt;&lt;br /&gt;com.liferay.portlet.journal.util.JournalOpenSearchImpl=true&lt;br /&gt;&lt;br /&gt;com.liferay.portlet.messageboards.util.MBOpenSearchImpl=true&lt;br /&gt;&lt;br /&gt;com.liferay.portlet.wiki.util.WikiOpenSearchImpl=true&lt;br /&gt;&lt;br /&gt;3. Change values to “false” for those you do not want to include in search result.&lt;br /&gt;&lt;br /&gt;For example, to search only “Web Content”, leave “com.liferay.portlet.journal.util.JournalOpenSearchImpl” to “true” and make other values to false.&lt;br /&gt;&lt;br /&gt;Enjoy the customized search in Liferay :)&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/383110369277103400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/add-search-in-theme-in-liferay.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/383110369277103400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/383110369277103400'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/add-search-in-theme-in-liferay.html' title='Add search in theme in LIFERAY'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-1026969914864229346</id><published>2012-01-05T22:49:00.000-08:00</published><updated>2012-01-05T22:49:13.608-08:00</updated><title type='text'>orderable search container in liferay by example</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Liferay provide us with many good taglib out of them search container is
 one of them.It is widely used taglib. For simple understanding of 
search container please check Wiki here is the link &lt;a href=&quot;http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/SearchContainer&quot;&gt;Wiki Search Container&lt;/a&gt;.
 One thing that article is missing how to implement ordering using. For 
that we will follow few step and will do a simple example.&lt;br /&gt;
Step 1: Read the wiki article &lt;a href=&quot;http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/SearchContainer&quot;&gt;Search Container&lt;/a&gt;.&lt;br /&gt;
Step 2:Now write the below code in your jsp.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%    &lt;br /&gt;
PortalPreferences portalPrefs = PortletPreferencesFactoryUtil.getPortalPreferences(request);  &lt;br /&gt;
String orderByCol = ParamUtil.getString(request, &quot;orderByCol&quot;);  &lt;br /&gt;
&lt;br /&gt;
String orderByType = ParamUtil.getString(request, &quot;orderByType&quot;);  &lt;br /&gt;
&lt;br /&gt;
if (Validator.isNotNull(orderByCol) &amp;amp;&amp;amp; Validator.isNotNull(orderByType)) { &lt;br /&gt;
portalPrefs.setValue(&quot;KK_3&quot;, &quot;kk-order-by-col&quot;, orderByCol);  &lt;br /&gt;
portalPrefs.setValue(&quot;KK_3&quot;, &quot;kk-order-by-type&quot;, orderByType); &lt;br /&gt;
&lt;br /&gt;
}  else {  &lt;br /&gt;
&lt;br /&gt;
orderByCol = portalPrefs.getValue(&quot;KK_3&quot;, &quot;kk-order-by-col&quot;, &quot;name&quot;);&lt;br /&gt;
orderByType = portalPrefs.getValue(&quot;KK_3&quot;, &quot;kk-order-by-type&quot;, &quot;asc&quot;); &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
OrderByComparator orderByComparator = AddressBookUtil.getAddressBookOrderByComparator(orderByCol, orderByType);&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now I will explain what is happening we are getting the column on which we have to do ordering in &lt;b&gt;orderByCol&lt;/b&gt; and order &lt;b&gt;asc or desc&lt;/b&gt; in &lt;b&gt;orderByType&lt;/b&gt;. &lt;br /&gt;
In line &lt;b&gt;portalPrefs.setValue(&quot;KK_3&quot;, &quot;kk-order-by-col&quot;, orderByCol);&lt;/b&gt; &lt;br /&gt;
here &quot;KK_3&quot; is namespace , &quot;kk-order-by-col&quot; is key and orderByCol is value. &lt;br /&gt;
In last line &lt;b&gt;OrderByComparator orderByComparator = AddressBookUtil.getAddressBookOrderByComparator(orderByCol, orderByType);&lt;/b&gt;&lt;br /&gt;
For this you need to write a comparator , I have written it in 
com.ext.portlet.addressBook.util.AddressBookUtil and write this code &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class AddressBookUtil {&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
* &lt;br /&gt;
* @param orderByCol&lt;br /&gt;
* @param orderByType&lt;br /&gt;
* @return&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
public static OrderByComparator getAddressBookOrderByComparator(&lt;br /&gt;
String orderByCol, String orderByType) {&lt;br /&gt;
&lt;br /&gt;
boolean orderByAsc = false;&lt;br /&gt;
&lt;br /&gt;
if (orderByType.equals(&quot;asc&quot;)) {&lt;br /&gt;
orderByAsc = true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
OrderByComparator orderByComparator = null;&lt;br /&gt;
&lt;br /&gt;
if (orderByCol.equals(&quot;name&quot;)) {&lt;br /&gt;
orderByComparator = new AddressBookNameComparator(orderByAsc);&lt;br /&gt;
} else if (orderByCol.equals(&quot;status&quot;)) {&lt;br /&gt;
orderByComparator = new AddressBookStatusComparator(orderByAsc);&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
return orderByComparator;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Now in same package write &lt;b&gt;AddressBookNameComparator&lt;/b&gt; and &lt;b&gt;AddressBookStatusComparator&lt;/b&gt; if you want you can write any where else and do the required imports. Below is the code for AddressBookNameComparator&lt;br /&gt;
&lt;br /&gt;
public class AddressBookNameComparator extends OrderByComparator {&lt;br /&gt;
&lt;br /&gt;
public static String ORDER_BY_ASC = &quot;name ASC&quot;;&lt;br /&gt;
&lt;br /&gt;
public static String ORDER_BY_DESC = &quot;name DESC&quot;;&lt;br /&gt;
&lt;br /&gt;
public AddressBookNameComparator() {&lt;br /&gt;
this(false);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public AddressBookNameComparator(boolean asc) {&lt;br /&gt;
_asc = asc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int compare(Object obj1, Object obj2) {&lt;br /&gt;
AddressBook project1 = (AddressBook) obj1;&lt;br /&gt;
AddressBook project2 = (AddressBook) obj2;&lt;br /&gt;
&lt;br /&gt;
int value = project1.getName().toLowerCase().compareTo(&lt;br /&gt;
project2.getName().toLowerCase());&lt;br /&gt;
&lt;br /&gt;
if (_asc) {&lt;br /&gt;
return value;&lt;br /&gt;
} else {&lt;br /&gt;
return -value;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public String getOrderBy() {&lt;br /&gt;
if (_asc) {&lt;br /&gt;
return ORDER_BY_ASC;&lt;br /&gt;
} else {&lt;br /&gt;
return ORDER_BY_DESC;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private boolean _asc;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Do the required imports .Same way you can do for other columns.&lt;br /&gt;
Step 3: Use the SearchContainer taglib. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;liferay-ui:search-container&lt;br /&gt;
emptyResultsMessage=&quot;No Result Found&quot;&lt;br /&gt;
orderByCol=&quot;&amp;lt;%= orderByCol %&amp;gt;&quot;&lt;br /&gt;
orderByType=&quot;&amp;lt;%= orderByType %&amp;gt;&quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;liferay-ui:search-container-results results=&quot;&amp;lt;%= 
AddressBookLocalServiceUtil.getAddressBookList(searchContainer.getStart(),
 searchContainer.getEnd(),orderByComparator)%&amp;gt;&quot;&amp;gt;&lt;br /&gt;
total=&quot;&amp;lt;%=  AddressBookLocalServiceUtil.getAddressBookCount()  %&amp;gt;&quot;&lt;br /&gt;
/&amp;gt;&lt;br /&gt;
&amp;lt;liferay-ui:search-container-row 
classname=&quot;com.ext.portlet.addressBook.model.AddressBook&quot; 
escapedmodel=&quot;&amp;lt;%= true %&amp;gt;&quot;&amp;gt;&lt;br /&gt;
keyProperty=&quot;bookId&quot;&lt;br /&gt;
modelVar=&quot;addressBook&quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;liferay-ui:search-container-column-text name=&quot;name&quot; orderable=&quot;&amp;lt;%= true %&amp;gt;&quot; orderableproperty=&quot;name&quot;&amp;gt;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%= addressBook.getName() %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/liferay-ui:search-container-column-text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;liferay-ui:search-container-column-text name=&quot;status&quot; 
orderable=&quot;&amp;lt;%= true %&amp;gt;&quot; orderableproperty=&quot;status&quot; 
property=&quot;status&quot;&amp;gt;&lt;br /&gt;
/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/liferay-ui:search-container-column-text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;liferay-ui:search-iterator /&amp;gt;&lt;br /&gt;
&amp;lt;/liferay-ui:search-container-row&amp;gt;&amp;lt;/liferay-ui:search-container-results&amp;gt; &lt;br /&gt;That is all about orderable search container.If you have read the wiki article then you will easily understand this.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/1026969914864229346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/orderable-search-container-in-liferay.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/1026969914864229346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/1026969914864229346'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/orderable-search-container-in-liferay.html' title='orderable search container in liferay by example'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-791888296593332657</id><published>2012-01-05T22:45:00.000-08:00</published><updated>2012-01-05T22:45:26.091-08:00</updated><title type='text'>I18N Liferay 6.x</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Hi today I will share how to use in built Liferay I18N functionality to your custom portlet in Liferay 6.x&lt;br /&gt;&lt;br /&gt;
 It is very simple to add it , for that we need to modify just 2 files.&lt;br /&gt;&lt;br /&gt;
 1.portlet.xml --- In this file add resource bundle entry.&lt;br /&gt;&lt;br /&gt;
 e.g &amp;lt;resource-bundle&amp;gt;content.Language&amp;lt;/resource-bundle&amp;gt;&lt;br /&gt;&lt;br /&gt;
 2.build.xml --- In this file we need to call below target.&lt;br /&gt;&lt;br /&gt;
 &amp;lt;target name=&quot;build-lang&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;
  &amp;lt;antcall target=&quot;build-lang-cmd&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;
   &amp;lt;param name=&quot;lang.dir&quot; value=&quot;docroot/WEB-INF/src/content&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;
   &amp;lt;param name=&quot;lang.file&quot; value=&quot;Language&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;
  &amp;lt;/antcall&amp;gt;&lt;br /&gt;&lt;br /&gt;
 &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;
 Now we need to just add one file with name &lt;b&gt;Language.properties&lt;/b&gt; under &lt;b&gt;docroot/WEB-INF/src/content&lt;/b&gt;&lt;br /&gt;
 from build.xml using ant call buil-lang. That it !!!
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/791888296593332657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/i18n-liferay-6x.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/791888296593332657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/791888296593332657'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/i18n-liferay-6x.html' title='I18N Liferay 6.x'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-8505272532649702215</id><published>2012-01-04T04:29:00.000-08:00</published><updated>2012-01-04T04:29:47.733-08:00</updated><title type='text'>Liferay Search Container</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h3 class=&quot;post-title entry-title&quot;&gt;

&lt;a href=&quot;http://liferay-blogging.blogspot.com/2011/08/creating-liferay-search-container-guis.html&quot;&gt;Creating Liferay Search Container GUIs&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&quot;post-header&quot;&gt;


&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Time for some basic knowledge:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;What
 does the liferay-ui tld say about the search container? How is it 
possible to create nice and functional search container GUIS? Read the 
following and you know more:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;The
 search container is always rendering a set of rows that contain one or 
more columns to display search results. You may change the way the 
search container is rendering the rows but in the end it will always be a
 set of rows. So what we are going to do now will only affect the rows 
itself. We won&#39;t change the search container to display grids or 
something similar.&lt;/span&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;The liferay search container is structured as follows:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;div class=&quot;bar&quot;&gt;
&lt;div class=&quot;tools&quot;&gt;
&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;print&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;dp-xml&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;liferay-ui:search-container&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;liferay-ui:search-container-results&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;comments&quot;&gt;&amp;lt;!--&amp;nbsp;Calculate&amp;nbsp;results--&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;liferay-ui:search-container-results&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;liferay-ui:search-container-row&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&lt;span class=&quot;comments&quot;&gt;&amp;lt;!--Create&amp;nbsp;the&amp;nbsp;rows&amp;nbsp;that&amp;nbsp;display&amp;nbsp;the&amp;nbsp;search&amp;nbsp;results--&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;liferay-ui:search-container-row&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;liferay-ui:search-container&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Because we will only care for the rows, we will jump right in and take a look at some of the tags you can use:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: medium;&quot;&gt;search-container-column-text&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;div class=&quot;bar&quot;&gt;
&lt;div class=&quot;tools&quot;&gt;
&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;print&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;dp-xml&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;liferay-ui:search-container-column-text&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;userName&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;property&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;userName&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;The
 column text tag creates a label filled with a header text (name) and a 
populated value of the search container entity (property). In our case, 
the property userName would be taken from our entity and displayed.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: medium;&quot;&gt;search-container-column-jsp&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: xx-small;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;div class=&quot;bar&quot;&gt;
&lt;div class=&quot;tools&quot;&gt;
&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;print&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;dp-xml&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;liferay-ui:search-container-column-jsp&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;path&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;/your.jsp&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;right&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Very
 powerful! Allows to create a complete JSP that will be displayed in 
every row. By using this tag you can create your own forms with AlloyUI 
or standard HTML / Javascript and let the search container do all the 
magic.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: medium;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: medium;&quot;&gt; search-container-column-button&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;div class=&quot;bar&quot;&gt;
&lt;div class=&quot;tools&quot;&gt;
&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;print&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;dp-xml&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;liferay-ui:search-container-column-button&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;align&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;right&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;href&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;&amp;lt;%=&amp;nbsp;yourUrl&amp;nbsp;%&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&#39;clickMe&#39;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; font-size: 13px; white-space: pre;&quot;&gt;Allows to create a button pretty easy and connect it to a URL.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; font-family: Monaco, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Lucida Console&#39;, monospace; font-size: 13px; white-space: pre;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: medium;&quot;&gt;search-container-column-score&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Times New Roman&#39;; font-size: x-small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;div class=&quot;bar&quot;&gt;
&lt;div class=&quot;tools&quot;&gt;
&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;print&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search/label/SearchContainer#&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;dp-xml&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;liferay-ui:ratings&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;classPK&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;&amp;lt;%=user.getUserId()%&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;className&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;&amp;lt;%=User.class.getName()&amp;nbsp;%&amp;gt;&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; font-size: 13px; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Shows the score for the retrieved object.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; font-size: 13px; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; font-size: 13px; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;These
 tags allow you to create very fast very powerful search container GUIs.
 I´ve only touched the surface here and there is a lot more of liferay 
magic that you can discover. Just take a look at the TLD which you can 
find here:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; font-size: 13px; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/liferay-book/source/browse/trunk/portlets/library-portlet/docroot/WEB-INF/tld/liferay-ui.tld?spec=svn3&amp;amp;r=3&quot;&gt;http://code.google.com/p/liferay-book/source/browse/trunk/portlets/library-portlet/docroot/WEB-INF/tld/liferay-ui.tld?spec=svn3&amp;amp;r=3&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;If you like this tutorial it would be very nice, if you could click 
on some of the google ads you see on the right side. It helps me run 
this block and motivates me ;)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
If you have any questions, feel free to leave a comment.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/8505272532649702215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-search-container.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/8505272532649702215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/8505272532649702215'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-search-container.html' title='Liferay Search Container'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-5368957583388016346</id><published>2012-01-04T01:45:00.001-08:00</published><updated>2012-01-04T01:45:36.407-08:00</updated><title type='text'>Hide the Control Panel</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h3 class=&quot;post-title entry-title&quot;&gt;

&lt;a href=&quot;http://liferay-blogging.blogspot.com/2011/08/hiding-liferay-control-panel.html&quot;&gt;Hiding the Liferay Control Panel&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&quot;post-header&quot;&gt;


&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Whenever
 you set up Liferay for a customer, there will be a requirement to 
prevent the &quot;normal&quot; user from accessing the control panel. Some 
administrators fear, the user might do things he´s not supposed to do, 
others fear, the the user might be confused.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;But how do you hide the control panel?&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Well,
 there are several possibilities, and none of them is really nice. There
 is no portal.properties entry and there is no permission you could set.
 Either you do it programmatically or by CSS and then you also have the 
loophole of users entering the control panel URL into the browser:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;You, and all of your users can always access the control panel by entering &quot;&lt;a href=&quot;http://localhost:8080/group/control_panel&quot;&gt;http://localhost:8080/group/control_panel&lt;/a&gt;&quot;
 into the Browser, no matter what you do. To prevent this, I suspect you
 have to take a look at ServletFilters and prevent every access to this 
URL if the User is no administrator.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;I
 will now point out two possibilities how to hide the control panel and I
 would be very glad if you could describe your own approaches in the 
comments section.&lt;/span&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: medium;&quot;&gt;Hiding the Control Panel programmatically&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;if
 you want to hide the control panel for all users, who are no 
administrators you can overwrite the ServicePreAction class in your ext 
environment. If you take a look at the servicePre method you will find 
this:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;div class=&quot;bar&quot;&gt;
&lt;div class=&quot;tools&quot;&gt;
&lt;a href=&quot;http://liferay-blogging.blogspot.com/search?updated-max=2011-10-29T02:52:00-07:00&amp;amp;max-results=7#&quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search?updated-max=2011-10-29T02:52:00-07:00&amp;amp;max-results=7#&quot;&gt;print&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search?updated-max=2011-10-29T02:52:00-07:00&amp;amp;max-results=7#&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;dp-j&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span&gt;themeDisplay.setShowControlPanelIcon(signedIn);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;So,
 what ever you do in the .vm files your theme provides: All logged in 
users will always see the link to the control panel. To remove it, just 
call the RoleLocalServiceUtil, check whether your user has 
administrative rights, and change the code above.&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: medium;&quot;&gt;Hide the Control Panel using CSS&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;You could hide the control panel using CSS: You need to apply &lt;i&gt;display:none&lt;/i&gt; styles to all elements of the class(es)&amp;nbsp;&lt;i&gt;&quot;control-panel last aui-menu-item&quot;.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;But
 how do you make sure, the control panel is hidden from normal users 
?&amp;nbsp;To do this, you need to have your own theme. In your theme you need to
 change the portal_normal.vm and add the following:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;div class=&quot;bar&quot;&gt;
&lt;div class=&quot;tools&quot;&gt;
&lt;a href=&quot;http://liferay-blogging.blogspot.com/search?updated-max=2011-10-29T02:52:00-07:00&amp;amp;max-results=7#&quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search?updated-max=2011-10-29T02:52:00-07:00&amp;amp;max-results=7#&quot;&gt;print&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/search?updated-max=2011-10-29T02:52:00-07:00&amp;amp;max-results=7#&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;dp-xml&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span&gt;#if&amp;nbsp;($permissionChecker.isCompanyAdmin($company_id))&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;style&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;attribute&quot;&gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span class=&quot;attribute-value&quot;&gt;&quot;text/css&quot;&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;.control-panel{&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;display:none;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;tag-name&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;tag&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;#end&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;That´s it .. control panel should be hidden!&lt;/span&gt; &lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/5368957583388016346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/hide-control-panel.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/5368957583388016346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/5368957583388016346'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/hide-control-panel.html' title='Hide the Control Panel'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-8828694644264284931</id><published>2012-01-04T01:42:00.001-08:00</published><updated>2012-01-04T01:42:57.259-08:00</updated><title type='text'>Connecting Liferay to LinkedIn</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h3 class=&quot;post-title entry-title&quot;&gt;

&lt;a href=&quot;http://liferay-blogging.blogspot.com/2011/10/connecting-liferay-to-linkedin.html&quot;&gt;Connecting Liferay to LinkedIn&lt;/a&gt;
&lt;/h3&gt;
&lt;div class=&quot;post-header&quot;&gt;


&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Whenever
 you think about using liferay in your business you will surely think of
 it as an &quot;integration platform&quot;: One platform to integrate all the 
information sources that matter to your customers.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;In
 this blog post we will look at how to integrate LinkedIn into your 
portal. In one of the next posts we will do the same with facebook, but 
today we will care about the world´s leading business network.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;When
 we talk about integration we mean: &quot;Getting the Data&quot;. Liferay always 
expects to have the users data in its user table and it doesn´t make any
 sense to rip that core functionality out of liferay. Our goal is to get
 you connected to linkedIn, so that you have the following possibilities&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Authenticate with linkedIn&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Import data from linkedIn&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: medium;&quot;&gt;Preparation&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Our first step will be to allow your liferay instance to connect to linkedIn.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;To
 do so, you need to create an application for linkedIn. If you already 
did that, you can skip this step and continue with step 2.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;To be able to connect to linkedIn (no matter what you do) you need to create a linkedIn application.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;First, visit this page:&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/secure/developer&quot;&gt;https://www.linkedin.com/secure/developer&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Enter
 all necessary data and create your linkedIn application. If you do so, 
you should now have an API - Key and a secret password. You need those 
to create the OAuth authentication flow that is needed to authorize your
 application to access the data of the users.&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: medium;&quot;&gt;What business case ?&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Something
 that you should know before even registering your app at linkedIn is 
what you want to do with the data you get on linkedIn. Your use cases 
define the way you need to change or configure the liferay 
implementation. You might&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Show job offerings in an own portlet&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Send linkedIn messages from liferay&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;authenticate the User with linkedIn&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;etc etc etc&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;There is a lot you can do. So think about it, and when you are ready, go on to step 3&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana,sans-serif; font-size: medium;&quot;&gt;Accessing LinkedIn&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;There are many ways to connect to LinkedIn, but I am only going to show one here.&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;There is a pretty good java API available under&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://code.google.com/p/linkedin-j/&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;http://code.google.com/p/linkedin-j/&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;.
 It seems to be pretty up to date, still under development and (as far 
as I could see) offers access to all the data LinkedIn provides.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Download
 the latest version and put all the jars either into the lib dir of your
 application server or into WEB-INF\lib of the portlet you are 
developing. Now you should think about how to implement the OAuth flow 
for linkedIn (facebook is the same ...). The OAuth authentication 
mechanism basically consists of two steps:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Get the user-specific access token for every user by letting them autorize your app.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;Use the access token to get their data from linkedIn.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;The
 first step is something that can be done pretty good in a servlet 
because it requires some back - and forth communication between the 
linkedIn and your server. But if you have all the parameters from your 
portlet at hand, I am sure you can also embed it into a portlet. The 
code to let the User authenticate your app at linkedIn is the following:&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;div class=&quot;bar&quot;&gt;
&lt;div class=&quot;tools&quot;&gt;
&lt;a href=&quot;http://liferay-blogging.blogspot.com/#&quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/#&quot;&gt;print&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/#&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;dp-j&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;Create&amp;nbsp;the&amp;nbsp;oauthService&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;keyword&quot;&gt;final&lt;/span&gt;&lt;span&gt;&amp;nbsp;LinkedInOAuthService&amp;nbsp;oauthService&amp;nbsp;=&amp;nbsp;LinkedInOAuthServiceFactory.getInstance().createLinkedInOAuthService(your-consumerKey,&amp;nbsp;your-consumerSecret);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;comment&quot;&gt;//Create&amp;nbsp;the&amp;nbsp;request&amp;nbsp;token&amp;nbsp;to&amp;nbsp;get&amp;nbsp;the&amp;nbsp;autorization&amp;nbsp;URL.&amp;nbsp;You&amp;nbsp;need&amp;nbsp;to&amp;nbsp;specify&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&lt;span class=&quot;comment&quot;&gt;//a&amp;nbsp;Callback&amp;nbsp;URL.&amp;nbsp;That´s&amp;nbsp;the&amp;nbsp;URL&amp;nbsp;where&amp;nbsp;the&amp;nbsp;auth&amp;nbsp;token&amp;nbsp;is&amp;nbsp;forwarded&amp;nbsp;to&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;LinkedInRequestToken&amp;nbsp;requestToken&amp;nbsp;=&amp;nbsp;oauthService.getOAuthRequestToken(CALLBACK_URL);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;String&amp;nbsp;authUrl&amp;nbsp;=&amp;nbsp;requestToken.getAuthorizationUrl();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&lt;span class=&quot;comment&quot;&gt;//forward&amp;nbsp;to&amp;nbsp;authorization&amp;nbsp;page&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;resp.sendRedirect(authUrl);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;By
 implementing this, the user should be transported to the LinkedIn page 
where he has to authorize your app. If he accepts, he will be 
transported back to the CALLBACK_URL you specified and you will then 
have access to his access token. To get his access token, implement the 
following:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;div class=&quot;bar&quot;&gt;
&lt;div class=&quot;tools&quot;&gt;
&lt;a href=&quot;http://liferay-blogging.blogspot.com/#&quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/#&quot;&gt;print&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/#&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;dp-j&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;comment&quot;&gt;//&amp;nbsp;Get&amp;nbsp;the&amp;nbsp;OAuth&amp;nbsp;Verifier&amp;nbsp;from&amp;nbsp;the&amp;nbsp;request&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;String&amp;nbsp;oauthVerifier&amp;nbsp;=&amp;nbsp;req.getParameter(&lt;span class=&quot;string&quot;&gt;&quot;oauth_verifier&quot;&lt;/span&gt;&lt;span&gt;);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&lt;span class=&quot;comment&quot;&gt;//create&amp;nbsp;the&amp;nbsp;oauth&amp;nbsp;service&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;keyword&quot;&gt;final&lt;/span&gt;&lt;span&gt;&amp;nbsp;LinkedInOAuthService&amp;nbsp;oauthService&amp;nbsp;=&amp;nbsp;LinkedInOAuthServiceFactory.getInstance().createLinkedInOAuthService(your-consumerKey,&amp;nbsp;your-consumerSecret);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;comment&quot;&gt;//Create&amp;nbsp;the&amp;nbsp;request&amp;nbsp;token&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;LinkedInRequestToken&amp;nbsp;requestToken&amp;nbsp;=&amp;nbsp;oauthService.getOAuthRequestToken(CALLBACK_URL);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;String&amp;nbsp;authUrl&amp;nbsp;=&amp;nbsp;requestToken.getAuthorizationUrl();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span class=&quot;comment&quot;&gt;//finally:&amp;nbsp;The&amp;nbsp;access&amp;nbsp;token&amp;nbsp;!!!&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;LinkedInAccessToken&amp;nbsp;accessToken&amp;nbsp;=&amp;nbsp;oauthService.getOAuthAccessToken(requestToken,&amp;nbsp;oauthVerifier);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;If
 you have this access token, you´re done. You don´t need more to access 
all fields of the user. Persist this access token somewhere in your 
database and retrieve it every time you need to update your data. Here 
is an example of how to get the Users first name:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;dp-highlighter&quot;&gt;
&lt;div class=&quot;bar&quot;&gt;
&lt;div class=&quot;tools&quot;&gt;
&lt;a href=&quot;http://liferay-blogging.blogspot.com/#&quot;&gt;view plain&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/#&quot;&gt;print&lt;/a&gt;&lt;a href=&quot;http://liferay-blogging.blogspot.com/#&quot;&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class=&quot;dp-j&quot;&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&lt;span&gt;LinkedInConnector&amp;nbsp;connector&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;keyword&quot;&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;LinkedInConnector();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;LinkedInApiClient&amp;nbsp;client&amp;nbsp;=&amp;nbsp;connector.connect(accessToken);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;&quot;&gt;&lt;span&gt;Person&amp;nbsp;profile&amp;nbsp;=&amp;nbsp;client.getProfileForCurrentUser();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li class=&quot;alt&quot;&gt;&lt;span&gt;System.out.println(&lt;span class=&quot;string&quot;&gt;&quot;First&amp;nbsp;name:&amp;nbsp;&quot;&lt;/span&gt;&lt;span&gt;+profile.getFirstName());&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, sans-serif;&quot;&gt;That´s
 all! All you need to do now is to define your business use case and get
 all the fields you need. Contact me if you need any assistance.&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/8828694644264284931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/connecting-liferay-to-linkedin.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/8828694644264284931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/8828694644264284931'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/connecting-liferay-to-linkedin.html' title='Connecting Liferay to LinkedIn'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-6360987412765223535</id><published>2012-01-03T23:20:00.000-08:00</published><updated>2012-01-03T23:20:18.418-08:00</updated><title type='text'>Liferay portlet as Facebook App</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
How to integrate Liferay portlet as an Facebook tab on facebook page&lt;br /&gt;
&lt;br /&gt;
1.Go to facebook developers create an App.&lt;br /&gt;
 &lt;br /&gt;
2.After creating an App you get the AppId and App Secret&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now goto your liferay portlet which you want to deploy as an APP on your facebook page&lt;br /&gt;
&lt;br /&gt;
Go to confugiration of portlet&amp;nbsp; you find a facebook tab there.Click it.&lt;br /&gt;
&lt;br /&gt;
Now you need to fill your FB AppId .And you also need to give the url of the page where u want ur App to be displayed on facebook.&lt;br /&gt;
&lt;br /&gt;
After filling both fiels you get a callback URL.Just copy that URL .&lt;br /&gt;
&lt;br /&gt;
Now comeback to Facebook Developer.Open your app settings.And now u want ur portlet to be displayed as an page tab so just open Page tab option.You will See 3 tabs there&lt;br /&gt;
&lt;br /&gt;
Page tab URL:- Put that call back url there&lt;br /&gt;
&lt;br /&gt;
Secure Page tab URL:- Here you need to give the Https (secured one).Facebook provide option of secure browsing .If you dont provide the secure URL than the users who are using Facebook on HTTPS will unable to see your App.&lt;br /&gt;
&lt;br /&gt;
Page Edit Tab URL:- Put the same call back URL there&lt;br /&gt;
&lt;br /&gt;
SAVE IT.&lt;br /&gt;
&lt;br /&gt;
Now Add this app to your desired page and u will see your portlet as an page tab App.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note:-For making your liferay portlet working on HTTPS for displaying ur porlet to secure browsing users u need to enable the Https.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/6360987412765223535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-portlet-as-facebook-app.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/6360987412765223535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/6360987412765223535'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-portlet-as-facebook-app.html' title='Liferay portlet as Facebook App'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-2568613404045726543</id><published>2012-01-03T03:48:00.001-08:00</published><updated>2012-01-03T03:48:38.756-08:00</updated><title type='text'>Inter Portlet Communication</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;line-height: 150%; text-align: center;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;Portlet&amp;nbsp; to&amp;nbsp; Portlet&amp;nbsp; Communication&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;&lt;span style=&quot;text-decoration: none;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;Introduction&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%;&quot;&gt;
&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;The first version of the portlet specification&lt;b&gt;, JSR-168/portlet1.0&lt;/b&gt;,
 did not include any support for Inter Portlet Communication. The second
 version, JSR-286/ portlet2.0, which is supported for IPC &amp;nbsp;Mechanism.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%;&quot;&gt;
&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;IPC &amp;nbsp;is made easy &amp;nbsp;with JSR-286 to share the data between two portlets. Using IPC mechanisms, we can share the data from &lt;b&gt;ACTION&lt;/b&gt; to &lt;b&gt;VIEW&lt;/b&gt; phase and &amp;nbsp;&lt;b&gt;VIEW-VIEW&lt;/b&gt; Phase. &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%;&quot;&gt;
&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;There are 3&amp;nbsp; ways&amp;nbsp; to&amp;nbsp; share&amp;nbsp; the&amp;nbsp; data&amp;nbsp;&amp;nbsp; between&amp;nbsp; 2&amp;nbsp; portlets.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;line-height: 150%; margin-left: 40.5pt; text-indent: -0.25in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;1.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;Portlet session&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: 150%; margin-left: 40.5pt; text-indent: -0.25in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;2.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;IPC&amp;nbsp; Mechanisms&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: 150%; margin-left: 76.5pt; text-indent: -0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;2.1&lt;span style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;Public Render Parameters&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: 150%; margin-left: 76.5pt; text-indent: -0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;2.2&lt;span style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;Event&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: 150%; margin-left: 76.5pt; text-indent: -0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;2.3&lt;span style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;Client-Side IPC&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;line-height: 150%; margin-left: 40.5pt; text-indent: -0.25in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;3.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;Cookies&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoListParagraph&quot; style=&quot;line-height: 150%; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;1.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;1. Portlet &amp;nbsp;Session&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.25in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.25in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;By
 default , Each war has its own session and will not be shared with 
other&amp;nbsp; wars. Liferay provides a mechanism by which Portlets can share 
session attributes&amp;nbsp;across&amp;nbsp;WARs.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.25in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.25in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;A &lt;/span&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;PortletSession&lt;/span&gt;&lt;/b&gt;&lt;/code&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; is created for each user per portlet application. This makes the &lt;/span&gt;&lt;code&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;PortletSession&lt;/span&gt;&lt;/b&gt;&lt;/code&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; useful for communicating all user related information among different portlets in the same portal application. &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.25in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.25in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Step 1:&amp;nbsp; set below attributes in Portlet1&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;liferay-portlet.xml&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; :&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt;portlet&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt;private-session-attributes&amp;gt;false&amp;lt;/private-session-attributes&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt;/portlet&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.25in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.25in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;u&gt;Step 2:&amp;nbsp; To set the Session&lt;/u&gt;&lt;/b&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;PortletSession session = renderRequest.getPortletSession();&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;session.setAttribute(&quot;sessionValue&quot;,some-value , PortletSession.APPLICATION_SCOPE);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Step 3 : Get the Session Value in Portlet2&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;PortletSession ps = renderRequest.getPortletSession();&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;String tabNames = (String)ps.getAttribute(&quot;sessionValue &quot;,ps.APPLICATION_SCOPE);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: -0.25in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;2.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;IPC Mechanism&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: -0.25in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;2.1&lt;span style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Public Render Parameter :&amp;nbsp;&amp;nbsp; &lt;b&gt;IPC&lt;/b&gt; ( Inter Portlet Communication)&amp;nbsp; :&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: -0.25in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxHtTHsCWvgynQTI_L3ZqmDxdjCt0ci2H2jp_NgzEfwnW4on7RaFXIKuGQw1wXrv0E5JTSLiKGclXbDO8EzrYQ9qz3BisxDcKl2zQsydB4muYwPY8lclOPTM5qUs8jCfa3sP2FxapZ52s/s1600/IPC.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;209px&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxHtTHsCWvgynQTI_L3ZqmDxdjCt0ci2H2jp_NgzEfwnW4on7RaFXIKuGQw1wXrv0E5JTSLiKGclXbDO8EzrYQ9qz3BisxDcKl2zQsydB4muYwPY8lclOPTM5qUs8jCfa3sP2FxapZ52s/s320/IPC.png&quot; width=&quot;320px&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; id=&quot;aui_3_2_0_1414&quot; style=&quot;line-height: 150%; margin-left: 0.5in;&quot;&gt;
&lt;span id=&quot;aui_3_2_0_1413&quot; style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;In JSR 168, the render parameters set in &lt;b&gt;&lt;i&gt;processAction&lt;/i&gt;&lt;/b&gt; is only available in the &lt;b&gt;&lt;i&gt;render&lt;/i&gt;&lt;/b&gt; of the same portlet. With the &lt;b&gt;Public Render Parameters&lt;/b&gt; feature, the &lt;b&gt;render parameters&lt;/b&gt; set in the &lt;b&gt;&lt;i&gt;processAction&lt;/i&gt;&lt;/b&gt; of one portlet will be available in &lt;b&gt;&lt;i&gt;render&lt;/i&gt;&lt;/b&gt; of other portlets also.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%; margin-left: 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;By adding the following property in &lt;b&gt;portlet-ext&lt;/b&gt;, we can enable portlets to share render states with other portlets that are on different pages:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-left: 0.5in; text-indent: 0.5in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-family: &#39;Tw Cen MT&#39;,&#39;sans-serif&#39;;&quot;&gt;portlet.public.render.parameter.distribution&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-family: &#39;Tw Cen MT&#39;,&#39;sans-serif&#39;;&quot;&gt;=ALL_PORTLETS&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;Step 1:&amp;nbsp; Add below attribute in “Sender-Portlet” &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoListParagraph&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&amp;lt;portlet-app&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;lt;portlet&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt;&amp;lt;supported-public-render-parameter&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;b&gt;id1&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt;/supported-public-render-parameter&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;
&lt;b&gt;&amp;lt;/portlet&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt;public-render-parameter&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp; &amp;lt;identifier&amp;gt;&lt;b&gt;id1&lt;/b&gt;&amp;lt;/identifier&amp;gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt;qname xmlns:x=&quot;http://abc.com/userId&quot;&amp;gt;x:&lt;b&gt;param1&lt;/b&gt;&amp;lt;/qname&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt;/public-render-parameter&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.5in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;lt;/portlet-app&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;Note: We&amp;nbsp; can declare a list of &lt;b&gt;public paramters&lt;/b&gt; for a portlet application.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Step&amp;nbsp; 2&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;We can set render parameter in the &lt;b&gt;processAction&lt;/b&gt;() method by using the defined public render parameter identifier as the key.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt;response.setRenderParameter(&quot;id1&quot;, “someIdValue”);&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;e.g&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt;public void processAction(ActionRequest&amp;nbsp; request, ActionResponse response)&lt;br /&gt;
&lt;br /&gt;
throws IOException, PortletException&amp;nbsp; { ........ &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;response.setRenderParameter(&quot;id1&quot;, “someIdValue”); ........&lt;br /&gt;
&lt;br /&gt;
}&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Step&amp;nbsp; 3 : Receiver Portlet Portlet&amp;nbsp; &lt;span style=&quot;color: #0070c0;&quot;&gt;“portlet.xml”&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Specify the render parameter the portlet would like to share in the portlet section.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;lt;portlet-app&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;
&amp;lt; portlet &amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 70.5pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;lt; portlet-name &amp;gt;PortletB&amp;lt; /portlet-name &amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 70.5pt;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt; supported-public-render-parameter &amp;gt;&lt;b&gt;id1&lt;/b&gt;&amp;lt; /supported-public-render-parameter &amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 34.5pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;lt; /portlet &amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 70.5pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt;public-render-parameter&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 106.5pt;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp; &amp;lt;identifier&amp;gt;&lt;b&gt;id1&lt;/b&gt;&amp;lt;/identifier&amp;gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 106.5pt;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt;qname xmlns:x=&quot;http://abc.com/userId&quot;&amp;gt;x:&lt;b&gt;param1&lt;/b&gt;&amp;lt;/qname&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 70.5pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;lt;/public-render-parameter&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 34.5pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;lt;/portlet-app&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Step 4&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; :&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;A portlet can read public render parameter using following method&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in; text-indent: 0.5in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;request.getPublicParameterMap()&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;Note: Public render parameters are merged with regular parameters so can also be read using&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt;request.getParameter(“id1”);&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Step 5: &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;A portlet can remove a public render parameter by invoking following methods.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt;response.removePublicRenderParameter(“&lt;b&gt;id1&lt;/b&gt;”)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.25in; text-indent: -0.25in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3&lt;span style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;Event&amp;nbsp; :&amp;nbsp;&amp;nbsp; IPC ( Inter Portlet Communication)&amp;nbsp; : &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-left: 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-left: 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-left: 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;a href=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=9cf047bd-d939-42f2-a477-af826b2fd0dd&amp;amp;groupId=14&amp;amp;t=1290961988382&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;170px&quot; src=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=9cf047bd-d939-42f2-a477-af826b2fd0dd&amp;amp;groupId=14&amp;amp;t=1290961988382&quot; width=&quot;400px&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-left: 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-left: 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Portlet events that a portlet can receive and send.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-left: 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;In JSR-168 :&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;
The only way to achive eventing was through portlet session.&lt;br /&gt;
Limitation : Portlet has to be in the same web application.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;In JSR-286 :&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
JSR 286 (Portlet 2.0) defines a lifecycle for events, so that eventing 
is possible between portlets that are in different web applications.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-left: 0.5in;&quot;&gt;
&lt;span style=&quot;font-family: &#39;Tw Cen MT&#39;,&#39;sans-serif&#39;;&quot;&gt;By
 adding the following property in portal-ext, we can enable portlets to 
send and receive events from other portlets that are on different pages&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &#39;Tw Cen MT&#39;,&#39;sans-serif&#39;;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt;portlet.event.distribution=ALL_PORTLETS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 150%; margin-left: 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt; line-height: 150%;&quot;&gt;Step 1: Sender Portlet&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;portlet.xml&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;-----------&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;The portlet standard defines a way of telling the portlet container&amp;nbsp; which portlet is responsible for sending an event.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;Add this inside &lt;b&gt;&amp;lt;portlet&amp;gt;&lt;/b&gt; tag:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;portlet-app&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;lt;portlet&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f;&quot;&gt;supported-publishing-event&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt; &lt;span style=&quot;color: #7f007f;&quot;&gt;xmlns:x&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&#39;http://liferay.com&#39;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: teal;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 2in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;qname&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;x:empinfo&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;qname&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;supported-publishing-event&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/portlet&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;event-definition&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt; &lt;span style=&quot;color: #7f007f;&quot;&gt;xmlns:x&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&#39;http://liferay.com&#39;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: teal;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;qname&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;x:empinfo&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;qname&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;value-type&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;java.lang.String&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;value-type&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;event-definition&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/portlet-app&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Step 3 : Set the event in process action:&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black;&quot;&gt;javax.xml.namespace.QName qName = &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 2in; text-indent: 0.5in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #7f0055; font-size: 12pt;&quot;&gt;new&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt; QName(&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #2a00ff; font-size: 12pt;&quot;&gt;&quot;http://liferay.com&quot;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #2a00ff; font-size: 12pt;&quot;&gt;&quot;empinfo&quot;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #2a00ff; font-size: 12pt;&quot;&gt;&quot;x&quot;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;response.setEvent(&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;qName, &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #2a00ff; font-size: 12pt;&quot;&gt;&quot;Hai You have received Event Data sent from Sender Portlet&quot;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Step 4: Listner Portlet&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;portlet.xml:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;-----------&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;portlet-app&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;&amp;lt;portlet&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;supported-processing-event&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt; &lt;span style=&quot;color: #7f007f;&quot;&gt;xmlns:x&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&#39;http://liferay.com&#39;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: teal;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;qname&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;x:empinfo&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;qname&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;supported-processing-event&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;portlet&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;event-definition&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt; &lt;span style=&quot;color: #7f007f;&quot;&gt;xmlns:x&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;=&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;color: #2a00ff;&quot;&gt;&#39;http://liferay.com&#39;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: teal;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;qname&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;x:empinfo&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;qname&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;value-type&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;java.lang.String&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;value-type&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;event-definition&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #3f7f7f; font-size: 12pt;&quot;&gt;portlet-app&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: teal; font-size: 12pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Step 5: get the EVENT: &lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;This Even will be called after &lt;b&gt;processAction&lt;/b&gt; as shown in the picture:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Lifecycle for IPC Event:&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;text-decoration: none;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=084d7a05-94b4-4125-bad8-572e95753d1e&amp;amp;groupId=14&amp;amp;t=1290962128191&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;44px&quot; src=&quot;http://cdn.www.liferay.com/image/image_gallery?uuid=084d7a05-94b4-4125-bad8-572e95753d1e&amp;amp;groupId=14&amp;amp;t=1290962128191&quot; width=&quot;400px&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;text-decoration: none;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #646464; font-size: 12pt;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;javax.portlet.&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #646464; font-size: 12pt;&quot;&gt;ProcessEvent&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;(qname = &lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #2a00ff; font-size: 12pt;&quot;&gt;&quot;{http://liferay.com}empinfo&quot;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #7f0055; font-size: 12pt;&quot;&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #7f0055; font-size: 12pt;&quot;&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt; handleProcessempinfoEvent(&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;javax.portlet.EventRequest request, javax.portlet.EventResponse response) &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 2in;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #7f0055; font-size: 12pt;&quot;&gt;throws&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt; javax.portlet.PortletException, java.io.IOException {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; javax.portlet.Event event = request.getEvent();&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String value = (String) event.getValue();&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.&lt;/span&gt;&lt;i&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #0000c0; font-size: 12pt;&quot;&gt;out&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;.print(&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #2a00ff; font-size: 12pt;&quot;&gt;&quot;value in process event&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&quot;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt; + value);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; response.setRenderParameter(&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: #2a00ff; font-size: 12pt;&quot;&gt;&quot;empInfo&quot;&lt;/span&gt;&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;, value);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; color: black; font-size: 12pt;&quot;&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-family: &#39;Tw Cen MT&#39;,&#39;sans-serif&#39;;&quot;&gt;2.3 Client-Side IPC&amp;nbsp; : &lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;There are 2 APIs for client side IPC. &lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Event generation (call from portlet A):&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt;Liferay.fire(&#39;&amp;lt;eventName&amp;gt;&#39;, {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; name : value&amp;nbsp; &lt;br /&gt;
});&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;e.g.&lt;/b&gt; &lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt;Liferay.fire(&#39;planTravel&#39;, {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; origin : &#39;pune&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; destination : &#39;mumbai&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Event Listener ((call from portlet B):&lt;/span&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt;Liferay.on(&#39;&amp;lt;eventName&amp;gt;&#39;, function(event) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;e.g.&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot;&gt;Liferay.on(&#39;planTravel&#39;, function(event) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; showNews(&#39;&#39;, event.origin);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; showNews(&#39;&#39;, event.destination);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;3. &lt;u&gt;&amp;nbsp;Cookies&lt;/u&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;Other than the &lt;b&gt;IPC mechanism,&lt;/b&gt;&amp;nbsp; There is an easiest way to get the data between portlets on different pages called &lt;b&gt;COOKIES&lt;/b&gt;. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;But there are some limitations for cookies&amp;nbsp; that it will not accept more than 4KB size datas and th&lt;span style=&quot;color: black;&quot;&gt;e
 biggest limitation is, the 20 cookies per server limit, and so it is 
not a good idea to use a different cookie for each variable that has to 
be saved&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Portlet 1&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;To Set the Cookies through jQuery&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt; :&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;lt;script src=&quot;/html/js/jquery/cookie.js&quot; type=&quot;text/javascript&quot; &amp;gt; &amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;function setCookie(docURL) {&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in; text-indent: 0.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;jQuery.cookie(&quot;cookieParam&quot;,docURL);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in; text-indent: 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;To Set the Cookies through java / jsp:&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;HttpServletResponse response = PortalUtil.getHttpServletResponse(&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; actionResponse);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;Cookie cookieParam = new Cookie(&quot;cookieParam &quot;, password);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;response.addCookie(cookieParam);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt; text-indent: 0.5in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Portlet 2:&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0pt;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;To get the Cookies through jQuery :&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;jQuery.cookie(&quot;cookieParam &quot;);&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in; text-indent: 0.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1in;&quot;&gt;
&lt;b&gt;&lt;u&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;To get the Cookie through java/ jsp :&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;String sessionid = &quot;&quot;;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;Cookie[] cookies = request.getCookies();&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cookies != null) {&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; cookies.length; i++) {&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cookies[i].getName().equals(&quot;cookieParam &quot;)) {&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sessionid = cookies[i].getValue();&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0pt 1.5in;&quot;&gt;
&lt;span style=&quot;background: none repeat scroll 0% 0% yellow; font-size: 12pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/2568613404045726543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/inter-portlet-communication.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/2568613404045726543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/2568613404045726543'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/inter-portlet-communication.html' title='Inter Portlet Communication'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxHtTHsCWvgynQTI_L3ZqmDxdjCt0ci2H2jp_NgzEfwnW4on7RaFXIKuGQw1wXrv0E5JTSLiKGclXbDO8EzrYQ9qz3BisxDcKl2zQsydB4muYwPY8lclOPTM5qUs8jCfa3sP2FxapZ52s/s72-c/IPC.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-269874254374576258</id><published>2012-01-03T03:30:00.001-08:00</published><updated>2012-01-03T03:30:28.676-08:00</updated><title type='text'>Velocity Variables</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span id=&quot;internal-source-marker_0.7979558349053962&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 18pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;Macros&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 18pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;Variables/Methods&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: #006699; font-family: Arial; font-size: 13pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;Theme specific variables&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;a href=&quot;about:blank&quot;&gt;&lt;span style=&quot;background-color: transparent; color: blue; font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$theme_display&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The theme display object &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$portlet_display&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The portlet display object &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$css_class&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The css class specified for the &quot;color scheme&quot; in the liferay-look-and-feel.xml &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$css_folder&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The absolute path to the css directory &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$images_folder&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The absolute path to the images directory &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$javascript_folder&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The absolute path to the javascript directory &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$templates_folder&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The absolute path to the templates directory &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$full_css_path&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The absolute path to the css directory &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$full_templates_path&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The absolute path to the templates directory &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$css_main_file&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The absolute path to the css/main.css file &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$js_main_file&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The absolute path to the javascript/javascript.js file &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: #006699; font-family: Arial; font-size: 13pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;Company specific variables&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;a href=&quot;about:blank&quot;&gt;&lt;span style=&quot;background-color: transparent; color: blue; font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$company_id&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The company id (specified in Admin Portlet &amp;gt; Settings) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$company_name&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The name of the company (specified in Admin Portlet &amp;gt; Settings) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$company_logo&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The absolute path to the image of the company logo (specified in Admin Portlet &amp;gt; Settings) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$company_url&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The URL of the company (specified in the Admin Portlet &amp;gt; Settings) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: #006699; font-family: Arial; font-size: 13pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;User specific variables&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;a href=&quot;about:blank&quot;&gt;&lt;span style=&quot;background-color: transparent; color: blue; font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_greeting&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The greeting that the user get&#39;s upon page visit (specfied in My Account or Admin &amp;gt; Users) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_email_address&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The user&#39;s email address (specfied in My Account or Admin &amp;gt; Users) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_id &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The user&#39;s id (set in My Account) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$language_id&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The ID of the user&#39;s language (specfied in My Account or Admin &amp;gt; Users) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$time_zone&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The users&#39;s time zone (specfied in My Account) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_comments&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The comments related to the user (specfied in My Account or Admin &amp;gt; Users) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_login_ip&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The IP address that the user is currently logged on from &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_last_login_ip&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The last IP address the user logged on from &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$is_default_user&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;A boolean that specifies if the current user is the default one &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_location&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The user&#39;s location &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_organization&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The user&#39;s organization &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_group&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The group that the user belongs to &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_birthday&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The user&#39;s birthday &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$is_male&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;A boolean that specifies if the user is male &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$is_female&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;A boolean that specifies if the user is female &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_name&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The user&#39;s full name &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_first_name&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The user&#39;s first name &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_middle_name&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The user&#39;s middle name (if any) &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$user_last_name&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The user&#39;s last name&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: #006699; font-family: Arial; font-size: 13pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;Dock specific variables&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;a href=&quot;about:blank&quot;&gt;&lt;span style=&quot;background-color: transparent; color: blue; font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$show_add_content&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;Boolean set to specify that the add content link can be displayed &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$add_content_text&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The text that gets displayed if the add content link is enabled &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$add_content_url&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The url where the add content link points to &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$layout_text&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The text to be displayed for the &quot;Change Layout&quot; link &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$layout_url&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The url where the &quot;Change Layout&quot; link points to &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$show_home&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;Boolean set to specify that the &quot;Home&quot; link can be displayed &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$home_text&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The text to be displayed for the &quot;Home&quot; link &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$home_url&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The url where the &quot;Home&quot; link points to &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$show_my_account&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;Boolean set to specify that the &quot;My Account&quot; link can be displayed &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$my_account_text&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The text to be displayed for the &quot;My Account&quot; link &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$my_account_url&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The url where the &quot;My Account&quot; link points to &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$show_page_settings&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;Boolean set to specify that the &quot;Page Settings&quot; link can be displayed&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$page_settings_text&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The text to be displayed for the &quot;Page Settings&quot; link&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$page_settings_url&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The url where the &quot;Page Settings&quot; link points to &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$show_sign_in&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;Boolean set to specify that the &quot;Sign In&quot; link can be displayed&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$sign_in_text&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The text to be displayed for the &quot;Sign In&quot; link &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$sign_in_url&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The url where the &quot;Sign In&quot; link points to&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$show_sign_out&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;Boolean set to specify that the &quot;Sign Out&quot; link can be displayed &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$sign_out_text&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The text to be displayed for the &quot;Sign Out&quot; link&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$sign_out_url&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The url where the &quot;Sign Out&quot; link points to&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: #006699; font-family: Arial; font-size: 13pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;Page specific variables&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;a href=&quot;about:blank&quot;&gt;&lt;span style=&quot;background-color: transparent; color: blue; font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$selectable&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;A boolean set that specifies whether a page is &quot;selectable&quot;, meaning is it part of the navigation&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$page&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The current page/layout object&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$the_title&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The current title of the page&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: #006699; font-family: Arial; font-size: 13pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;Navigation specific variables&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;a href=&quot;about:blank&quot;&gt;&lt;span style=&quot;background-color: transparent; color: blue; font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$nav_items&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;An
  object that contains all of the pages that are part of the navigation.
  To set the styling for each navigation item, you must loop through the
  $nav_items object with a #foreach.&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$has_navigation&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;A boolean set to whether or not there are any pages in the $nav_items object&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;These
  methods exist on each sub-object eg. when you&#39;re looping through the  
$nav_items object, you would do $foreach ($nav_item in $nav_items) and  
you would call $nav_item.METHOD_NAME() &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;isSelected()&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;This returns a boolean that indicates whether a navigation item is currently selected. &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;getURL()&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;This returns a string that contains the navigation item&#39;s URL. &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;getTarget()&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;This returns a string that contains the navigation item&#39;s target (as defined in the Page Settings). &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;getName()&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;This returns a string that contains the navigation item&#39;s page name. &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;hasChildren()&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;This returns a boolean that indicates whether a navigation item has children. &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;getChildren()&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;This
  returns an object that is has the same methods and variables as the  
$nav_items object, but contains the current navigation item&#39;s children  
pages. &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: #006699; font-family: Arial; font-size: 13pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;Misc variables&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;a href=&quot;about:blank&quot;&gt;&lt;span style=&quot;background-color: transparent; color: blue; font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;$update_available_url&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;The url where the &quot;Update Available&quot; link points to &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: #006699; font-family: Arial; font-size: 13pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;Utility macros&lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;a href=&quot;about:blank&quot;&gt;&lt;span style=&quot;background-color: transparent; color: blue; font-family: Arial; font-size: 9pt; font-style: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;What&#39;s a macro?&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;A
  macro is a function that does text manipulation inside of Velocity. 
You  can feed it parameters, and it will print out a string for you. 
Macros  are not like traditional methods or functions, in that they 
don&#39;t return  data, and while they can manipulate text based upon the 
parameters you  pass in, it can only print. &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;#css(FILE_NAME)&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;Creates a link element like so: &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&amp;lt;link href=&quot;FILE_NAME&quot; rel=&quot;stylesheet&quot; type=&quot;text/stylesheet&quot; /&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;#js(FILE_NAME)&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;br class=&quot;kix-line-break&quot; /&gt;Creates a script element like so: &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&amp;lt;script src=&quot;FILE_NAME&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;hr /&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;&quot;&gt;#language(LANGUAGE_KEY)&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; Prints out the language string related to the LANGUAGE_KEY.&lt;br class=&quot;kix-line-break&quot; /&gt;This replaces the following functionality: &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;$languageUtil.get($company.getCompanyId(), $locale, LANGUAGE_KEY)&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 12pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/269874254374576258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/velocity-variables.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/269874254374576258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/269874254374576258'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/velocity-variables.html' title='Velocity Variables'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-3203728061433692606</id><published>2012-01-03T02:04:00.001-08:00</published><updated>2012-01-03T02:04:45.583-08:00</updated><title type='text'>Liferay Portlet Configuration Files</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;u&gt;&lt;b&gt;Configuration file:&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;liferay-display.xml: &lt;/b&gt;This file describes for Liferay what category the portlet should appear under in the Add Application window.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;liferay-portlet.xml:&lt;/b&gt; This file describes some optional Liferay-specific enhancements &lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; portlet-name&amp;nbsp;&lt;/b&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; The portlet-name element contains the canonical name of the portlet. This needs to be&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; the same as the portlet-name given in portlet.xml.&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; icon&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Path to icon image for this portlet.&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instanceable &amp;nbsp;&lt;/b&gt; &amp;nbsp;&amp;nbsp; Indicates if multiple instances of this portlet can appear on the same page.&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struts-path&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt; &amp;nbsp;&amp;nbsp; Tells the portal that all requests with the path ext/library/* are considered part of&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this portlet&#39;s scope. For example, a struts-path of ext/library will give us access to&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /ext/library/view in struts-config.xml, but not /ext/reports/view.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;b&gt;portlet.xml:&lt;/b&gt;&amp;nbsp; This files has the below configuration options.&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; portlet-name&lt;/b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; The portlet-name element contains the canonical name of the portlet.&amp;nbsp;&amp;nbsp; Each portlet&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name is unique within the portlet application. (This is also referred within Liferay Portal&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; as the portlet id).&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; display-name&amp;nbsp;&lt;/b&gt;&amp;nbsp;&amp;nbsp; The display-name type contains a short name that is intended to be displayed by tools.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; It is used by display-name elements. The display name need not be unique.&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; portlet-class&amp;nbsp;&lt;/b&gt; &amp;nbsp;&amp;nbsp; The portlet-class element contains the fully qualified class name of the portlet.&lt;br /&gt;
&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; init-param:&amp;nbsp;&lt;/b&gt;&amp;nbsp;&amp;nbsp; The init-param element contains a name/value pair as an initialization param of the&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; portlet.&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; expiration-cache:&lt;/b&gt; Expiration-cache defines expiration-based caching for this portlet. The parameter&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; indicates the time in seconds after which the portlet output expires. -1 indicates that the&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output never expires.&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; supports:&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;The supports element contains the supported mime-type. Supports also indicates the portlet&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; modes a portlet supports for a specific content type. All portlets must support the view&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mode.&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; portlet-info:&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Portlet-info defines portlet information.&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; security-role-ref :&lt;/b&gt; The securit-role-ref element contains the declaration of a security role reference in&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the code of the web application.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Specifically in Liferay, the role-name references which role’s can 
access the portlet.(A Power User can personalize the portal, whereas a 
User cannot.)&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/3203728061433692606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-portlet-configuration-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/3203728061433692606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/3203728061433692606'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/liferay-portlet-configuration-files.html' title='Liferay Portlet Configuration Files'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-432220343181647150</id><published>2012-01-03T01:49:00.001-08:00</published><updated>2012-01-03T01:49:19.169-08:00</updated><title type='text'>Solr Integration with Liferay</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div align=&quot;CENTER&quot; style=&quot;font-family: times new roman; margin-bottom: 0cm;&quot;&gt;
&lt;span style=&quot;font-size: 180%;&quot;&gt;Solr Integration with Liferay&lt;/span&gt;&lt;/div&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;font-family: times new roman;&quot;&gt;
&lt;span style=&quot;color: #474a4b; font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; &lt;span style=&quot;color: black;&quot;&gt;Solr
 is the popular, blazing fast open source enterprise search platform 
from the Apache Lucene project. Its major features include powerful 
full-text search, hit highlighting, faceted search, dynamic clustering, 
database integration, and rich document (e.g., Word, PDF) handling. Solr
 is highly scalable, providing distributed search and index replication,
 and it powers the search and navigation features of many of the world&#39;s
 largest internet sites. Refer to &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;a href=&quot;http://lucene.apache.org/solr/&quot; style=&quot;color: black;&quot;&gt;&lt;span style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Apache Solr&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;border: medium none; color: black; font-family: times new roman; line-height: 0.48cm; margin-bottom: 0.16cm; margin-top: 0.13cm; orphans: 2; padding: 0cm; widows: 2;&quot;&gt;
 &lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;This document shows how to integrate Solr within Liferay Portal. Note that Liferay portal version must be &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;b&gt;6 &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;or above.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;border: medium none; color: black; font-family: times new roman; font-style: normal; font-weight: normal; line-height: 0.48cm; margin-bottom: 0.16cm; margin-top: 0.13cm; orphans: 2; padding: 0cm; widows: 2;&quot;&gt;
 &lt;span style=&quot;font-size: 85%;&quot;&gt;Integration steps :&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;border: medium none; color: black; font-family: times new roman; line-height: 0.48cm; margin-bottom: 0.16cm; margin-top: 0.13cm; orphans: 2; padding: 0cm; widows: 2;&quot;&gt;
 &lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;1 .  Download the latest Solr from this &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;zxx&quot; style=&quot;font-size: 85%;&quot;&gt;&lt;u&gt;&lt;a href=&quot;http://apache.cs.utah.edu//lucene/solr/1.4.1/apache-solr-1.4.1.zip&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;link&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;. Extract somewhere this zip file, and I will call this extracted folder as SOLR_HOME.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot; style=&quot;color: black; font-family: times new roman;&quot;&gt;
&lt;li&gt;&lt;div style=&quot;border: medium none; line-height: 0.48cm; margin-bottom: 0.16cm; margin-top: 0.13cm; orphans: 2; padding: 0cm; widows: 2;&quot;&gt;
  &lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Download  the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;zxx&quot; style=&quot;font-size: 85%;&quot;&gt;&lt;u&gt;&lt;a href=&quot;http://liferay.cignex.com/palm_tree/book/0387/chapter12/solr-web-6.0.1.1.war&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;solr-web-6.0.1.1&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;  war file and deploy the war file in liferay tomcat server.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;border: medium none; line-height: 0.48cm; margin-bottom: 0.16cm; margin-top: 0.13cm; orphans: 2; padding: 0cm; widows: 2;&quot;&gt;
  &lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Copy  the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;schema.xml&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;file  from the &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;solr-web/WEB-INF/conf&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;  folder which is deployed and paste/replace in   &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;SOLR_HOME/example/solr/conf&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;   folder.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;border: medium none; line-height: 0.48cm; margin-bottom: 0.16cm; margin-top: 0.13cm; orphans: 2; padding: 0cm; widows: 2;&quot;&gt;
  &lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Change  the solr url as follows in &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;solr-spring.xml  &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;which  is located in &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;solr-web/WEB-INF/classes/META-INF/   &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;folder.  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;  &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;border: medium none; color: black; font-family: times new roman; line-height: 0.48cm; margin-bottom: 0.16cm; margin-top: 0.13cm; orphans: 2; padding: 0cm; widows: 2;&quot;&gt;
      &lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Change  from this content :&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: arial; font-size: 85%;&quot;&gt;&amp;lt;bean id=&quot;solrServer&quot;&lt;br /&gt;          class=&quot;com.liferay.portal.search.solr.server.BasicAuthSolrServer&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;constructor-arg type=&quot;java.lang.String&quot; value=&quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;http://localhost:8080/solr&lt;/span&gt;&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;to this :&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id=&quot;solrServer&quot;&lt;br /&gt;          class=&quot;com.liferay.portal.search.solr.server.BasicAuthSolrServer&quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;constructor-arg type=&quot;java.lang.String&quot; value=&quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;http://localhost:8983/solr&lt;/span&gt;&quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;&lt;br /&gt;&lt;br /&gt;Note :&lt;/span&gt; 8983 is the default port for Solr.&lt;/span&gt;  &lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot; style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;span style=&quot;font-size: 85%;&quot;&gt;Now  shutdown the tomcat server.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot; style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;span style=&quot;font-size: 85%;&quot;&gt;Start the  Solr server using the following command from &lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;i&gt;SOLR_HOME/examle&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;  folder in command prompt/terminal. &lt;/span&gt;  &lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;i&gt;Java -jar start.jar&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot; style=&quot;font-style: normal; margin-bottom: 0cm;&quot;&gt;
&lt;span style=&quot;font-size: 85%;&quot;&gt;Start  the liferay tomcat server now.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div align=&quot;LEFT&quot; style=&quot;font-style: normal; margin-bottom: 0cm;&quot;&gt;
&lt;span style=&quot;font-size: 85%;&quot;&gt;Now
  add the search portlet in your home page and test your searches.  When
 ever you search anything you can see some log info in solr  server.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div align=&quot;LEFT&quot; style=&quot;margin-bottom: 0cm;&quot;&gt;
&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;&lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;Note :&lt;/span&gt;
  By defaut Solr searches for the new webcontent, wiki, blogs... etc 
from the time Solr is integrated. To search the complete portal &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;i&gt;reindex all search indexs&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt; from the &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;i&gt;server administration &lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 85%;&quot;&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;which is in control panel.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/432220343181647150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/solr-integration-with-liferay.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/432220343181647150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/432220343181647150'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/solr-integration-with-liferay.html' title='Solr Integration with Liferay'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825606071775982914.post-1063625041688230451</id><published>2012-01-03T01:35:00.001-08:00</published><updated>2012-01-03T02:03:19.401-08:00</updated><title type='text'>A story of &quot;Portlet&quot; and &quot;Servlet&quot;</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h3 class=&quot;post-title entry-title&quot;&gt;





 A story of &quot;Portlet&quot; and &quot;Servlet&quot;&lt;/h3&gt;
&lt;div class=&quot;post-header&quot;&gt;
&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;
There are so many things which are very clear and understood but if 
someone ask, it become&amp;nbsp;difficult&amp;nbsp;to explain them in deep. The topic I am
 going to write today, is something like that.&amp;nbsp;Hope, you&#39;ll enjoy 
reading it, as I am going to write this time full on text, no practical 
implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The contents of servlets provide generally takes up the whole page in a
 browser (if you are not framing them), and portlets content are wrapped
 in a window and we can place multiple portlets on same page with one 
another and each can provide different content and functionality. A 
portlet behaves like a full fledged application. The portal can provide 
some house keeping functionality and secured single point of entries to 
all of the portlets on a page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lets see first some &lt;b&gt;differences&lt;/b&gt; among portlets and servlets&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;
   Servlets can provide complete web pages, whereas portlets only 
provide fragments. These fragments are then aggregated to form a 
complete web page by the portal.&lt;/li&gt;
&lt;li&gt;
   Portlets aren&#39;t allowed to generated HTML code that contains tags 
such as base, body, frame, frameset, head, html, or title. The iframe 
tag can be used with caution.&lt;/li&gt;
&lt;li&gt;
   The user cannot access a portlet directly using a URL in the way that
 a servlet is accessed. Instead, the URL points to the page containing 
all of the portlets on one page.&lt;/li&gt;
&lt;li&gt;
   Communication between the web client and the portlets is performed through the portal.&lt;/li&gt;
&lt;li&gt;
   Portlets can be provided with buttons or controls to manipulate the portlet&#39;s window states or portlet modes.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
   Multiple instances of a single portlet can be placed onto the same page.&lt;/li&gt;
&lt;li&gt;
   Portlets support persistent configuration and customization.&lt;/li&gt;
&lt;li&gt;
   Portlets also support user profile information.&lt;/li&gt;
&lt;li&gt;
   Portlets support two scopes within the session; application scope&amp;nbsp;and portlet scope .&lt;/li&gt;
&lt;/ol&gt;
Here are some &lt;b&gt;similarities&lt;/b&gt;:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;
   Servlets and portlets are web based components that utilize Java for their implementation.&lt;/li&gt;
&lt;li&gt;
   Portlets are managed by a portlet container similar to a servlet container.&lt;/li&gt;
&lt;li&gt;
   Both of these components generate content, which can be static or dynamic.&lt;/li&gt;
&lt;li&gt;
   Both portlets and servlets have a lifecycle that is controlled by the container.&lt;/li&gt;
&lt;li&gt;
   The client/server model is used for both servlets and portlets.&lt;/li&gt;
&lt;li&gt;
   The packaging and deployment are essentially the same.&lt;/li&gt;
&lt;li&gt;
   The manner in which the classes are loaded and the class loaders that perform the work are also the same.&lt;/li&gt;
&lt;li&gt;
   Lifecycle management is similar.&lt;/li&gt;
&lt;li&gt;
   The Request and Response semantics are also similar.&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;Advantage of Servlets over portlets-&lt;/b&gt;&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;
   Portlet aren&#39;t allowed to set the character set encoding of the response.&lt;/li&gt;
&lt;li&gt;
   Portlet also aren&#39;t allowed to set the HTTP headers on the response.&lt;/li&gt;
&lt;li&gt;
   Portlet cannot manipulate the URL of the client request to the portal.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://innovationliferay.blogspot.com/feeds/1063625041688230451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/story-of-portlet-and-servlet-there-are.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/1063625041688230451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825606071775982914/posts/default/1063625041688230451'/><link rel='alternate' type='text/html' href='http://innovationliferay.blogspot.com/2012/01/story-of-portlet-and-servlet-there-are.html' title='A story of &quot;Portlet&quot; and &quot;Servlet&quot;'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/13477348651479527557</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>