Once again I faced the same old problem: I have one portlet A which carries a value X and 2 other portlets on the same page B and C that needs this value X on their render phase. The problem exists, because also the portlet A has this value on its render phase.
Liferay supports simpleCaptcha and reCaptcha by default. The problem is that if you want more instances of a captcha in one page (say, you have a complicated registration form for different kind of users), then none of those captcha engines will satisfy you, because they do not support it.
In the past I tried to find out how to unit test my plugins in liferay with no success. To be honest, I never tried much, and I am also a rookie in unit testing. I always wanted to learn to use test driven development but the pressure at work didn't helped me to change to that direction.
When writing a scheduler job in liferay, you don't have access to the the themeDisplay life in portlet methods. So you miss a lot of handy data. If you like to call in your job code some of the local utility classes, you could become the following exception:
In the last month we had to add different captchas in some liferay sites. Some customers were ok with the simple captcha, that comes per default with liferay and some others wanted to have the recaptcha of google, that also comes with liferay (not so default).
In case you are experiencing a strange behaviour in the Categories portlet of the control panel, like creating a category in vocabulary x and finding it in vocabulary y, you try to rebuild the category tree for this site.
Ever needed to know the groupId of a site? You don't have to posses technical knowledge to find out what the id of a site is. Just go in the Sites portlet in control panel, select the site you are interested in and under "Site ID" you can find the groupid of the site.
Add the following elements in the liferay-portlet.xml file