`
sunlujing
  • 浏览: 179701 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于serverResource方式的liferay中ajax方式的的实现

阅读更多

在portlet2.0中加入了几大新特性。

  1. 资源服务:一种新的通过 portlet 呈现资源的方式。
  2. 事件:通过发送事件和接收事件来实现 portlet 之间的通信。
  3. Portlet 过滤器:与 servlet 过滤器类似,根据 Portlet 请求和响应动态的呈现内容的变换。存在以下四种类型的 portlet 过滤器:
    • Action 过滤器
    • Render 过滤器
    • Resource 过滤器
    • Event 过滤器
  4. 共享呈现参数:除了 portlet 私有的呈现参数之外,新增了可以在 portlet 之间共享的呈现参数。
  5. Portlet 窗口:提供 portlet 窗口 ID portlet 使用。

事件通信可以参考我前面提到的一篇文章。本文章中主要讨论 使用资源服务的方式来完成一个ajax方式访问资源的方式。

JSR 286 采用了一种新的资源服务方式 —— Portlet 资源服务。即 JSR 286 引入了一个新的具有 serveResource 方法的可选生命周期接口 ResourceServingPortlet ,该接口可以由 ResourceURL 触发,Portlet 可以通过 PortletResponse.createResourceURL 方法创建它。资源 URL 包含当前 Portlet 的瞬时状态(Portlet 模式、窗口状态和呈现参数),但不能为此状态设置新值。资源 URL 可以有在资源 URL 上设置的其他资源参数。

通过调用 ResourceServingPortlet 接口的 serveResource() 方法, Portlet 不仅可以通过控制门户访问而对资源进行保护,并且 Portlet 容器不会呈现任何除 serveResource() 方法返回的内容之外的附加输出。这样,用户由于可以直接通过操作响应对象而被赋予了更多的控制权限,并且没有额外门户请求的开销,减轻了门户服务的负载。而 Portal 服务器此时只是充当了一个代理服务器的作用。

 

在本例子中我们使用jquery的EasyUI 组件作为测试UI。实现的方式主要有两点需要注意。

第一:用创建的resourceURL 代替原来的xx.do请求。

第二:在serveResource中 返回ajax请求所需要的json数据。

(ps:在liferay中使用了有自己的前端框架。其中默认支持了ajax方式。可以参考liferay的官方维基)

 

要实现资源服务必须实现ResourceServingPortlet 这个新增加的接口。在liferay中文名使用MVCPortlet,它extends 了GenericPortlet,后者实现了所有的接口。所以我们可以直接在我们的portlet类中直接使用资源服务。

 

主要代码示例:

 

前端(定义用于ajax请求的resourceURL)

<portlet:resourceURL id="userList" escapeXml="false" var="userList" ></portlet:resourceURL>
<portlet:resourceURL id="newUser" escapeXml="false" var="newUser" ></portlet:resourceURL>
<script type="text/javascript">

var url = "<%=userList%>";
var newUserurl = "<%=newUser%>";
</script>

 

在js中使用对应的url替换以前的xxx.do请求。

 $('#usergrid').datagrid({
    title:'user information',
    nowrap: false,
    width:'auto',
    height:400,
    url:url,
    striped: true,
    collapsible:true,
    remoteSort: false,
    idField:'id',
    。。。。。

 

 

通过上述的对应关系 就可以像以往使用ajax一样在liferay中使用ajax了。

 

后台的服务逻辑:

 

public void serveResource(ResourceRequest resourceRequest,ResourceResponse resourceResponse) throws IOException,PortletException {
  
  PrintWriter write = resourceResponse.getWriter();
  String resourceID = resourceRequest.getResourceID();
  if (resourceID.equals("userList")){
   List<User> users = service.queryUsers();
   try{
   String userJson = Object2JsonUtil.toJSONString(users);
   String jsonStr = "{\"rows\":"+userJson+"}";
   write.write(jsonStr);
   }catch(Exception e){
    e.printStackTrace();
   }
  }
  else if(resourceID.equals("newUser")){
   System.out.println(resourceRequest.getParameter("name"));
   System.out.println(resourceRequest.getParameter("password"));
   System.out.println(resourceRequest.getParameter("phone"));
   System.out.println(resourceRequest.getParameter("email"));
   write.write("\"message\":\"maomao\",\"success\":\"true\"}");
  }
  super.serveResource(resourceRequest, resourceResponse);
 }

 

其中resourceID  对应

<portlet:resourceURL id="userList" escapeXml="false" var="userList" ></portlet:resourceURL>
<portlet:resourceURL id="newUser" escapeXml="false" var="newUser" ></portlet:resourceURL>

这样一个基于资源服务的ajax请求就完成了。

 

 

附录是JSR268的详解稳定。如果需要这个例子的源代码。可以给我留个邮箱。

 

 

 

 

 

 

 

 

 

 

 

 

 

0
2
分享到:
评论
2 楼 sunlujing 2011-09-28  
不好意思,换过电脑,那个源码早就不见了啊。
1 楼 z1zhangyanan 2011-09-21  
把您的例子源代码发给我做个参考吧,谢谢!邮箱:myyanan@gmail.com

相关推荐

    Liferay ajax

    总结起来,Liferay 6中的Portlet与Ajax结合使用,可以实现更高效、更流畅的用户界面。通过`serveResource`方法处理Ajax请求,结合portlet.xml配置和客户端的JavaScript,我们可以构建出响应迅速且交互丰富的Portlet...

    基于Liferay+Portal技术的校园信息门户研究与实现

    基于Liferay+Portal技术的校园信息门户研究与实现,不仅解决了数字化校园建设中的信息孤岛问题,还提升了信息的集成度和个性化服务水平,极大地方便了师生的信息获取和使用。通过深入研究相关技术,结合具体项目实践...

    liferay development 中文

    4. **主题和布局**:Liferay支持自定义主题来改变门户的外观,以及布局来调整内容的展示方式。开发者需要学习如何使用FreeMarker模板语言和CSS来设计和实现主题,以及如何创建和配置布局模板。 5. **工作流和表单**...

    Liferay的CAS SSO实现

    在Liferay中实现SSO(Single Sign-On)单点登录功能,可以让用户在一个系统登录后,无需再次输入凭证就能访问其他关联系统,极大地提高了用户体验。其中,CAS(Central Authentication Service)是一个广泛应用的...

    sql Server liferay 的数据导入.

    在SQL Server中创建Liferay所需的数据库是迁移过程的第一步。 1. **启动企业管理器**: 启动SQL Server 2000的企业管理器并创建名为“lportal”的数据库。 2. **运行SQL脚本**: 使用`osql.exe`工具执行SQL脚本来创建...

    liferay的开发文档

    此外,文档还涵盖了portlet与Liferay服务的集成,如ServiceBuilder,用于自动生成服务层代码,以及如何利用Liferay的工作流系统实现业务流程自动化。 文档二:《Liferay Portlet Development》 此文档专注于portlet...

    Liferay微信登录自动登录

    在本文中,我们将深入探讨如何实现Liferay门户与微信的集成,从而实现微信登录的自动登录功能。Liferay是一款开源的企业级门户平台,它提供了丰富的定制化选项,包括自定义登录方式。微信作为中国最流行的社交应用之...

    liferay跨组件间通信实例

    Liferay作为一个开源的企业级门户平台,提供了多种方式来实现组件间的通信,以支持复杂的应用场景。本实例将深入探讨如何在Liferay中进行跨组件通信,并以`test-portlet`为例进行详细讲解。 首先,我们需要理解...

    Liferay 6 入门教程

    Struts2是一个流行的MVC框架,"plugins开发指南12-liferay6中struts2开发.pdf"将介绍如何在Liferay 6中集成Struts2,实现更高效的应用程序开发。同时,"plugins开发指南4-2简单的MVC分层结构的portlet-核心代码开发....

    liferay 超级学习文档

    开发者主要利用Java Servlets、JavaServer Pages (JSP) 和JavaBeans(现在被称为JavaServer Faces (JSF) 组件)来创建portlet,这些portlet是Liferay门户中的基本交互单元。此外,Java EE的其他服务,如EJB...

    Liferay集成CAS实现单点登录与应用系统集成

    【Liferay 门户集成CAS实现单点登录与应用系统集成】是将开源门户平台Liferay与中央认证服务(CAS)相结合,以实现用户在多个应用系统间的统一登录体验。Liferay是一个基于Java的企业级门户解决方案,它具备强大的...

    liferay 整合struts例子

    4. **Portlet开发**:在Liferay中,Struts Action可以通过实现Liferay的PortletAction接口来适应portlet环境。这样,Struts的请求处理机制就能与Liferay的portlet生命周期协同工作。 5. **部署与测试**:将整合后的...

    liferay教程

    Liferay还支持portlet间的通信,例如通过JSR-286的ResourceRequest和ResourceResponse实现。 Liferay的安全性是另一个重要的主题。它内置了角色和权限系统,允许管理员为不同用户和组分配不同的访问权限。此外,...

    liferay 资料

    - 它的界面设计是基于 Web 服务的,允许通过 Ajax 技术实现动态交互。 2. **portlet 开发**: - Portlet 是 Liferay 中的基本组件,它可以是一个网页、应用程序或内容的展示单元。 - Liferay 支持多种portlet ...

    liferay扩展环境 liferay ext

    1. **扩展框架**:Liferay Ext基于Maven构建,它提供了一个框架,开发者可以在其中添加自定义的类加载器,使得新的类和配置可以优先于默认的Liferay类加载,实现对核心功能的扩展。 2. **portlet开发**:通过...

    liferay ajax DEMO

    使用liferay框开发ajax 的Demo

    Liferay Portal Liferay IDE

    Liferay Portal Liferay IDE

    liferay详细讲解 liferay项目完全讲解

    在这个“liferay详细讲解 liferay项目完全讲解”的资料包中,我们可以期待深入了解到关于Liferay的核心概念、开发实践以及与其相关的技术。 首先,我们看到一个名为“JBPM数据库表说明.doc”的文件,这暗示了...

Global site tag (gtag.js) - Google Analytics