Showing 37 Comments
Great post, Jonas. jQuery is not only the default JavaScript framework in Liferay Portal 5.x, it is also widely used in out-of-box portlets from Liferay and custom portlets developed in Liferay community and enterprises. One of the most asked questions from my enterprise clients is how to handle the migration of jQuery-based portlets to Liferay Portal 6. With the solution explained in this blog, the migration shall be straight-forward. You can include your jQuery library in your own portlets running on Liferay Portal 6 and don't have to rewrite your portlets to use YUI3. Isn't it good to have both jQuery and YUI3 coexisted in your portal environment?
Xinsheng Chen
7/7/10 1:39 PM
Hi, Jonas,
This is really nice. The pictures are also good. Thanks!
Denis Signoretto
7/8/10 12:14 AM
Hi Jonas,
it I want include jQuery in all *.war (many portlets in different war) what's the best way? Can I add jQuery as global include?
Thanks,
Denis.
Jonas Yuan
7/8/10 6:59 AM
Hi Denis, thanks. You may manage many portlets with hook in a single plugin and add following in init_js.jsp (included in init.jsp):
<script type='text/javascript' src='js/jquery_1.4.2.js'></script>
Hope that it helps,
your comments?
Nate Cavanaugh
7/20/10 9:28 AM
Hi Denis,
The best way to do that would be to simply include the jQuery javascript file from your theme. That will guarantee that it's global for all portlets.
You can also view my recent blog post for more info: http://www.liferay.com/web/nathan.cavanaugh/blog/-/blogs/using-jquery-or-any-javascript-library-in-liferay-6-0
Mohamed Rizan
8/9/10 5:05 AM
Hi All,
I am new to liferay and portlet developement, i created my own portlet and it works fine in single column layout, but the problem is when i use it in 3 column layout in the center column, and if i refresh teh page , the page layout was changed to two column layout, i tried with this sample jquery portlet also, and i am getting the same problem,
Can any one pls suggest me am i missing anything..
Thanks in advance
Jonas Yuan
8/23/10 11:36 AM
Hi Mohamed, you can share your code here. Thus anybody can give you comments.
Path Finder LifeRay
9/13/10 4:18 AM
hey thanks for a fine discussion... Mohamed please give ur comments here as jonas said we can join discussion here itself...
Nguyễn Quang Thông
10/4/10 9:36 PM
Sorry All! Please help me!
I have problem with my ajax in liferay ( errors: "Liferay.fire is not a function" and "Liferay.Dockbar is not undefined")
I have I process2.js and declare process2.js in my jsp:
<script type="text/javascript" src="<%=HOST_URL%>/scripts/process.js"></script>
<script type="text/javascript" src="<%=HOST_URL%>/scripts/process2.js"></script>
(process2.js include AjaxGet2)
when i call AjaxGet2:
"AjaxGet2('<%=AddthongtinController%>','','add','divchild1','',"AjaxGet2('<%=ShowListAddController%>','','show','divchild2','','' );" ) my portlet is run ok. But Liferay.fire and Liferay.Dockbar not work. what's happen with my ajax and liferay????
[IMG]http://ca5.upanh.com/14.248.18474492.ngg0/untitled1.jpg[/IMG]
Thank alot.
Jonas Yuan
10/5/10 9:58 AM
Hi, Nguyễn, Thanks. Simply, you may use the sample code: jQuery and AJAX as entry point. There are a lot of examples talking about jQuery and AJAX.
Refer to jQuery UI: http://jqueryui.com/
Hope that it helps.
Nguyễn Quang Thông
10/5/10 7:40 PM
Thank so much Jonas X Yuan!
But i wonder what happen with my ajax, it run ok, but seem have some scramble or conflict with Liferay.Dockbar and Liferay.fire . Can you read it, please:
process2.js:
---------------
function AjaxGet2(address,param,containerid,divchild,revattribute,func){
//showloading();
$.ajaxSetup ({
// Disable caching of AJAX responses */
cache: false
});
$('#'+divchild).html("<div class='ajaxLoading'> Đang tải dữ liệu... </div>");
$.ajax(
{
url:address,
type:"GET",
cache: false,
datatype:"html",
data:param,
success:function(text){
showResponseText2(text,containerid,divchild,revattribute,func);
//closeloading();
}
}
);
}
-----------------
You can see clearly my process.js in link:
---
https://docs.google.com/leaf?id=0B_fgXf97eQg1ZjhiYWQ4NWUtN2I1ZS00NDQ2LThiOWEtNzYwNDhiMDNjZjZk&hl=en
---
And if my process2 unusable, you can help me for some code demo in jqueryui, please.(i looked for http://jqueryui.com/ but i don't see ...). So sorry! But i'm newbie. Sorry for my disturbing.
---------
Thank for you're help!!!
Nguyễn Quang Thông
10/7/10 2:02 AM
Oh, Jonas X. Yuan! I fixed this errors.
I think when my ajax return the object "text" which include something and have declares the Liferay.Dockbar and Liferay.Fire. So have conflict and duplicate.
For fix this error, i remove any code before <body></body> in object "text" return in my ajax.
I use javascript code:
----------------------------------------
AjaxGet2(address,param,containerid,divchild,revattribute,func){
...
...
...
$.ajax(
{
url:address,
type:"GET",
cache: false,
datatype:"html",
data:param,
success:function(text){
var str = text;
var indexBegin = str.indexOf('<body');
var indexEnd= str.indexOf('</body>');
var str1 = str.substring(indexBegin ,indexEnd+6);
showResponseText2(str1,containerid,divchild,revattribute,func);
//closeloading();
}
}
);
}
----------------------------------------
And now the liferay.Dockbar and another not die. But i wonder have anyway?
Jonas Yuan
10/7/10 2:13 PM
Hi Nguyễn, cool! Thanks for updates. You can move forward ...
Raja Nagendra Kumar
12/4/10 6:30 PM
does header-portlet-xxx mean this xxx gets included during the header time of the page building and is available to body (i.e all the portlets that page can use this xxx) and footer jsp too.
Also, could you pl. explain what is this tag css-class-wrapper and where it is used.
Regards,
Raja Nagendra Kumar,
C.T.O
www.tejasoft.com
Jonas Yuan
12/5/10 7:40 AM
Hi Raja, Thanks. You can find info at
Applying jQuery and its custom UI in Liferay 6 plugins
http://www.liferay.com/web/jonas.yuan/blog/-/blogs/applying-jquery-and-its-custom-ui-in-liferay-6-plugins.
like:
Note that the property header-portal-javascript sets the path of JavaScript that will be referenced in the page's header relative to the portal's context path; and the property footer-portal-javascript sets the path of JavaScript that will be referenced in the page's footer relative to the portal's context path.
Similarly, the property header-portlet-css sets the path of CSS that will be referenced in the page's header relative to the portlet's context path; while the property footer-portlet-css sets the path of CSS that will be referenced in the page's footer relative to the portlet's context path.
Hope that it helps,
Thanks,
Jonas
Mayur Patel
2/12/11 10:06 AM
Hi Jonas,
I have implemented this sample-jquery-portlet in LF6, Its looking very excellent and having many functionalities but I have to implement same thing in LF5.2.3
Which kind of changes I will have to make to run that same portlet in LF5.2.3 ?????...help me in that....
Thanks in Advance
Jonas Yuan
2/14/11 9:14 AM
Hi Mayur, Thanks.
For Liferay 5.2.5, you may refer to the post: Using jQuery (or any Javascript library) in Liferay 6.0 (by Nate) at http://www.liferay.com/web/nathan.cavanaugh/blog/-/blogs/using-jquery-or-any-javascript-library-in-liferay-6-0.
Hope that it helps.
alex wom
2/28/11 11:18 PM
If I need jquery widgets and scrolling 1.8.2 do I need to assemble them in a jquery-ui-custom.js? Another question: does your books available in ebook format? I live in Italy and I would like to download quickly.
Raja Nagendra Kumar
3/1/11 12:24 AM
Thank you Jonas, your detailed explain is too good.
Jonas Yuan
3/1/11 12:29 PM
Hi Alex, thanks.
By default, jquery widgets and scrolling should be included in UI 1.8.2. If possible, use UI latest version like 1.8.9 and jQuery 1.5.
Yes, ebook is available at https://www.packtpub.com/authors/profiles/jonas-x-yuan.
Hope that it helps.
Raghavendra V
3/7/11 12:00 AM
hi,
Is there any way to completely avoid Alloy Ui/YUI being loaded on liferay portlets and use only jQuery
Jonas Yuan
3/7/11 10:28 AM
Hi Raghavendra, the portal core uses Alloy Ui/YUI as default settings. But in your portlets, you can avoid using Alloy Ui/YUI. Of course, you can just use jQuery as you expected. This is the beauty of Liferay portal.
Nate Cavanaugh
3/7/11 6:17 PM
Hi guys,
To remove AlloyUI altogether would break any of the bundled portlets that rely on it.
To ask a different question, what could AlloyUI do better to help you not wish to remove it? We're always looking for great feedback, so if there's an area of AlloyUI that you guys would like to see improved or feel it's falling short of your needs, don't hesitate to ask
Raghavendra V
3/7/11 8:22 PM
Thanks much Jonas,
Raghavendra V
3/7/11 8:40 PM
Hi Nate, the reason behind to stick to jQuery is we have already developed few components based on jQuery framework and loading multiple frameworks is not good idea in page performance point of view.
Marc Piparo
3/17/11 3:30 PM
Please help.
I added entries into ad-portlet/WEB-INF/liferay-portlet.xml as follows:
<portlet>
<portlet-name>admanager</portlet-name>
<icon>/images/icon.png</icon>
<header-portlet-css>css/style.css</header-portlet-css>
<header-portlet-javascript>javascripts/jquery.js</header-portlet-javascript>
<layout-cacheable>true</layout-cacheable>
<add-default-resource>true</add-default-resource>
</portlet>
but now the ad manager portlet errors loading up:
org.springframework.be
ans.factory.BeanDefinitionStoreException: IOException parsing XML document from PortletContext res
ource [/WEB-INF/context/admanager-portlet.xml]; nested exception is java.io.FileNotFoundException: Could not open Portle
tContext resource [/WEB-INF/context/admanager-portlet.xml]
any ideas what I'm doing wrong?
Jonas Yuan
3/19/11 8:31 AM
Hi Marc, you got
FileNotFoundException: Could not open Portle tContext resource [/WEB-INF/context/admanager-portlet.xml].
Could you please double check /WEB-INF/context/admanager-portlet.xml?
Thanks,
Mani kandan
7/8/11 12:22 AM
Hi jonas
I have the problem over loading the javascript file in my custom portlet.
In my liferay-portlet.xml file
<portlet>
<portlet-name>165</portlet-name>
<instanceable>true</instanceable>
<header-portlet-javascript>/html/portlet/book/main.js</header-portlet-javascript>
</portlet>
When I make some changes in my main.js file, the js file not being loaded that is after refresh the page i couldn't get the modified values. It forced me to restart the tomcat server. I cleared cookies of my browser but still having problem.
Note: I am using LR 6.0.6 and i m not using Plugin i m creating portlet in LR tomcat itself.
Jonas Yuan
7/11/11 7:27 AM
Hi Mani,
Just tested jQuery 1.6.2 and UI 1.8.14 in Liferay 6.1, the approach mentioned in this post was working properly.
By the way, what's the /html/portlet/book/main.js?
Do you refresh the page?
Thanks
Jonas
[...] Hi, I am facing a peculiar issue with <portlet:namespace/> when used with jQuery, i followed the blog by Jonas, but quiet strangely my jQuery Javascript method is not picked up <aui:button... [...] Read More
Mani kandan
7/20/11 1:35 AM
Hi Jonas,
Yes i am refreshing the page after make some changes in my main.js file but I couldn't get the modified values. Once I restart the server then only it is affecting the values.
/html/portlet/book/main.js - is my js file path
/html/portlet/book/view.jsp - is my jsp file path
[...] I think Ajax tool kit Ajax no longer to be used for Liferay's new version. Yes better to choose DWR DWR Link Or jQuery Link Mark as an Answer [...] Read More
Serdar Ayalp
9/2/11 2:14 AM
thxs
[...] I think Ajax tool kit no longer to be used for Liferay's new version. Yes better to choose DWR DWR Link Or jQuery Link Mark as an Answer [...] Read More
[...] You can create as portlet as plugin portlet or create portlet in liferay-portal-6.0.6\tomcat-6.0.29\webapps\ROOT\html\portlet. Refer this blog blog and this link Flag Please sign in to flag this as... [...] Read More
[...] You can create as portlet as plugin portlet or create portlet in liferay-portal-6.0.6\tomcat-6.0.29\webapps\ROOT\html\portlet. Refer this blog blog and this link Flag Please sign in to flag this as... [...] Read More
Mani kandan
1/2/12 3:26 AM
good article thanks