- 浏览: 217941 次
- 性别:
- 来自: 湖北->上海
最新评论
-
苹果超人:
我也遇到这个问题,我想在ConfigurationAction ...
杀千刀的PortletPreferences -
flago:
Liferay 的论坛设置的默认显示多少条帖子怎么设置??
liferay中vm中如何调用java类代码 -
ofdata:
遭遇此问题
杀千刀的PortletPreferences -
yaokaiwen99:
大哥求一个简单的flexigrid在liferay中应用的例 ...
Liferay异步提交 -
gaigai511225:
你好 插件环境那个url 具体怎么写 我照您的方式写了出错 ...
Liferay异步提交
Liferay portlet异步刷新,分为两种情况。
一、刷新自已
1.在liferay-portlet.xml,文件中增加<render-weight>0</render-weight>
2.增加下面代码:此代码可以获得一个portlet的refreshURL
public static String getPortletRefreshURL(ThemeDisplay themeDisplay, HttpServletRequest request, String portletId, long plid){ StringBuilder url = new StringBuilder(); try { String doAsUserId = themeDisplay.getDoAsUserId(); LayoutTypePortlet layoutTypePortlet = themeDisplay.getLayoutTypePortlet(); UnicodeProperties properties = layoutTypePortlet.getLayout().getTypeSettingsProperties(); String columnId = ""; int columnPos = 0; Portlet portlet = null; int columnCount = 0; for(String key : properties.keySet()){ if(properties.get(key).indexOf(portletId) != -1) columnId = key; } List<Portlet> portlets = layoutTypePortlet.getAllPortlets(columnId); for(Portlet portlet1 : portlets){ //修改此处可以支持<instanceable>true</instanceable>的portlet if(portlet1.getPortletId().equals(portletId)){ portlet = portlet1; break; }else columnPos++; } columnCount = portlets.size(); url.append(themeDisplay.getPathMain()); url.append("/portal/render_portlet"); url.append("?p_l_id="); url.append(plid); url.append("&p_p_id="); url.append(portletId); url.append("&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_col_id="); url.append(columnId); url.append("&p_p_col_pos="); url.append(columnPos); url.append("&p_p_col_count="); url.append(columnCount); //PortletLocalServiceUtil.getPortletById(companyId, portletId) if (portlet.isStatic()) { url.append("&p_p_static=1"); if (portlet.isStaticStart()) { url.append("&p_p_static_start=1"); } } if (Validator.isNotNull(doAsUserId)) { url.append("&doAsUserId="); url.append(doAsUserId); } url.append("¤tURL="); url.append(HttpUtil.encodeURL(PortalUtil.getCurrentURL(request))); String ppid = ParamUtil.getString(request, "p_p_id"); if (ppid.equals(portletId)) { Enumeration enu = request.getParameterNames(); while (enu.hasMoreElements()) { String name = (String)enu.nextElement(); if (!PortalUtil.isReservedParameter(name)) { String[] values = request.getParameterValues(name); for (int i = 0; i < values.length; i++) { url.append(StringPool.AMPERSAND); url.append(name); url.append(StringPool.EQUAL); url.append(HttpUtil.encodeURL(values[i])); } } } Map renderParameters = RenderParametersPool.get(request, plid, ppid); Iterator itr = renderParameters.keySet().iterator(); while (itr.hasNext()) { String name = (String)itr.next(); String[] values = (String[])renderParameters.get(name); for (int i = 0; i < values.length; i++) { url.append(StringPool.AMPERSAND); url.append(name); url.append(StringPool.EQUAL); url.append(HttpUtil.encodeURL(values[i])); } } } } catch (SystemException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return url.toString(); }
3.在jsp中,增加下面javascript
<script type="text/javascript"> function <portalet:namespace/>refresh() { var ns = '<%= PortalUtil.getPortletNamespace(PortalUtil.getPortletId(request)) %>'; var url = '<%=PortletKernelUtil.getPortletRefreshURL(themeDisplay,request,PortalUtil.getPortletId(request),plid)%& gt;'; var portlet = jQuery('#p_p_id'+ns)[0]; portlet.refreshURL = url; portlet.id = '<%=PortalUtil.getPortletId(request)%>'; Liferay.Portlet.refresh(portlet); } </script>
4.在需要刷新的地方调用javascript <portalet:namespace/>refresh即可
二、A调用B
第1、2、4步同上面,唯一区别的是第3步
getPortletRefreshURL第三个参数需要传入B的portletId,
<portalet:namespace/>refresh中ns的值要改成B的namespace即可。
以下备注一定要读:
注:这里所提出的A调用B方案仅支持<instanceable>false</instanceable>的portlet,因为instanceable=false,portletId就是固定的值,这样namespace就可以确定(namespace="_"+portletId+"_"),而instanceable=true的portletId是会在后面加上自动生的四位识别码,这个是随机的无法确定。如果你一定想支持instanceable=true的portlet,你需要进行扩展,在代码里有注释的地方,进行扩展,反回一个Map<portletId, portletRefreshURL>,然后通过map循环调用js代码即可。
发表评论
-
JSR 286 Portlet 的新特性,第 3 部分: Portlet 过滤器和 Portlet 窗口
2010-06-01 10:24 2501在 本系列 的 第 1 部分 简要回顾了JSR 1 ... -
JSR 286 Portlet 的新特性,第 2 部分: 资源服务、事件与共享呈现参数
2010-05-31 18:42 2209在本系列的 第 1 部分 简要回顾了 J ... -
JSR 286 Portlet 的新特性,第 1 部分: Portlet 2.0 新特性介绍
2010-05-31 17:55 2411本系列文章专门针 ... -
Session share
2010-05-14 12:18 0Tomcat Server.xml <Servi ... -
Liferay集群负载均衡配置
2009-10-30 11:14 4889先介绍一下项目系统的环境, Liferay Version: ... -
Liferay 集群部署
2009-10-30 00:00 0十二点了,明天断续 -
Liferay 权限策略
2009-10-29 23:45 3105先上一张大家都很熟悉的图 这张图可以说是整 ... -
Liferay Portlet之间的通信
2009-10-29 19:12 5026从我做Liferay到现在,这个问题一直都存在着,直到最近我才 ... -
Liferay异步提交
2009-10-29 18:06 3401liferay的异步提交其实是非常简单的,他用的是json & ... -
准备开始整理半年来对lifeay新的学习成果
2009-10-29 18:04 1497有半年没有写过liferay的blog了,不过对life ... -
Ajax知识
2009-06-11 17:50 0<SCRIPT LANGUAGE=" ... -
改变Liferay Portal Context(让Liferay不在使用ROOT目录)
2009-05-25 22:46 1836在部署的时候如果遇到我们会遇到让liferay与其他的项目并存 ... -
velocity调用DB持久层,生成actionurl
2009-05-22 17:42 1182#set($hostelCacheService = $ser ... -
liferay 所有版本下载地址
2009-05-21 13:29 3249从1.7.5一直到现在的5.2.3,应有尽有。 htt ... -
liferay ldap配置与相关代码
2008-11-28 11:06 38571.下载LDAP server 并安装, liferay支 ... -
liferay 的加密技术(CRYPT,SHA,SSHA,MD2,MD5)
2008-11-27 15:59 4313package com.liferay.util; impo ... -
liferay openid配置与代码详解
2008-11-21 21:14 28481.liferay的openid的配置很简单的,先去 open ... -
liferay验证码认证
2008-08-27 15:26 2759生成验证码相关: /** * Copyright (c ... -
很烦,想站在阳台上大声的喊
2008-08-20 19:42 1803终于到回家了,好累, ... -
网络爬虫相关(自已记下来,怕以后忘记)
2008-08-16 13:15 1930package com.taobao.html; impor ...
相关推荐
在Liferay中,serverResource是一种处理客户端请求并返回资源的方式,尤其适用于异步请求,如Ajax。这种方式使得开发者能够更新页面的部分内容,而无需刷新整个页面,从而提高用户体验。下面我们将逐步解析这个过程...
在Liferay 6中,使用Ajax技术来处理Portlet请求是一种常见的优化用户交互的方法。Ajax(Asynchronous JavaScript and XML)允许部分页面更新,无需整个门户页面的刷新,从而提升了用户体验,尤其是在Portlet环境下。...
- **代码分割与异步加载**: 减少初始页面加载的脚本数量,将非关键资源异步加载或按需加载。 - **缓存利用**: 利用浏览器缓存减少重复资源的下载,提高加载速度。 - **压缩与优化资源**: 图片压缩、CSS和JavaScript...
Ajax技术允许开发者在不刷新整个页面的情况下与服务器进行异步通信,从而提升用户体验。Comet是另一种异步Web应用架构,通过在服务器端推送数据到客户端来实现长轮询,改善了Web应用的实时性能。 6. **Liferay和...
通过JavaScript与服务器进行异步通信,可以实现无刷新页面更新,使得Web应用程序更加动态和响应迅速。 3、WebWork:WebWork是一个轻量级的MVC框架,它提供了强大的表单绑定、异常处理和AOP特性。后来WebWork发展...
JSR-286相比之前的JSR-168,增加了许多新特性,例如异步处理、事件处理和增强的portlet间通信等,提升了portlet的性能和交互性。 NotificationPortlet充分利用了JSR-286的特性,实现了通知的动态加载和实时更新。...
Portlet是Java Portlet API定义的一种可重用、可组合的Web部件,它在门户环境中运行,如Liferay、Pluto等。在这个特定的场景中,"文件上载Portlet源代码"是为了实现portlet的文件上传功能,使得用户能够在portlet中...
Portlet是一种可重用的Web组件,它可以被嵌入到portlet容器(如Liferay Portal)中,提供特定的功能。portlet可以通过portlet API与portlet容器进行交互,如渲染内容、处理用户事件、管理用户会话等。 3. **Ajax与...
9. **性能优化**:对于实时更新的天气信息,portlet需要考虑性能和效率,比如使用缓存策略减少不必要的API调用,或者使用异步加载技术减轻服务器压力。 10. **响应式设计**:现代portlet应该具备响应式布局,确保在...
9. **Ajax技术**:为了提供更好的用户体验,portlet可能使用Ajax异步更新技术,使得用户无需刷新整个页面即可获取新数据。 10. **测试框架**:JUnit或其他单元测试工具可能被用来确保portlet的功能正确性和性能。 ...