一、Portlet是什么?

Portlet是基于java的web组件,由portlet容器管理,并由容器处理请求,生产动态内容。Portals使用portlets作为可插拔用户接口组件,提供信息系统的表示层。作为利用servlets进行web应用编程的下一步,portlets实现了web应用的模块化和用户中心化。 portlet规范,即jsr(Java Standardization Request )168/268,是为了实现portal和portlet的互操作。它定义了portlet和portlet容器之间的和约,让portlet实现个性化、表示和安全的api集。规范还定义了怎样在portlets应用中打包portlets。(引自百度百科:http://baike.baidu.com/view/58961.htm

Liferay是portlet规范的实现,对于portlet规范实现的主流产品还有IBM、Oracle等的Portal产品,主流产品的详细可以参看:http://www.huqiwen.com/2012/06/11/what-is-liferay/ 此篇文章中关于Liferay市场地位处的图片。很以很多时候我们将Liferay称为一个Portal容器,也就是一个提供Portlet运行的环境。

二、创建一个Portlet

1、基于上一节的Study这个portlet工程的基础。点击Liferay IDE上的liferay工具栏,有三个按钮,点击中间按钮,New Liferay Portlet。如下图,点击下一步。

Portlet plugin project:这里选择要创建的portlet属于哪个插件工程。

Source folder:类的放置位置,一般默认。

Portlet Class:要创建的Portlet的控制类的名称,可以将此类看作Struts中的Action类。

Java package:包名。

Superclass:选择要继承哪个类。一般默认,也就是MVCPortlet。下面这几个类的关系如下:MVCPortlet是LiferayPortlet的子类,LiferayPortlet是GenericPortlet的子类。在MVCPortlet中封装了一些方便开发的方法,所以一般使用MVCPortlet,如果有特殊需求可以使用他们的父类。

2、在此步骤看到的是Portlet的相关信息,如模式,JSP位置等,此步骤是portlet.xml文件的可视化编辑,此步骤的所有选项都可以通过编辑portlet.xml完成。点击下一步。

Porltet Info:这里显示的是Porltet的名称,显示名称,标题等。一般默认,不需要修改。

Portlet Modes:这里是portlet的模式,View、Edit、Help这三种模式,是portlet规范里面定义的。

Liferay Portlet Modes:看名知义,Liferay Portlet模式。一般默认即可。Portlet默认的三种模式,Liferay认为不能满足实际的需求,所以又新增了这几种模式。如果选择多个模式,就可以在portlet的设置里面看到,可以通过设置进行切换,方便进行一些特殊需求,如:config可以用来开发可配置Porltet,管理员可以为指定的Portlet定制相关的参数等。

JSP folder:JSP的存放位置,一般默认的命名是html/porltet名称,一般默认即可。html是相对于docroot的,完整路径是docroot/html/demo/view.jsp。

Create resource bundle file:绑定资源文件,主要是国际化。如果想要porltet的名称是中文的,测必须使用资源文件,liferay推荐工程中的所有文字描述类的内容都使用资源文件来定义,这样方便国际化,也能避免出现一些可能的乱码问题。这里先不选,后面详讲国际化。

3、此步骤是Liferay-portlet.xml和liferay-display.xml的可视化编辑。点击完成即可。

Icon:此portlet的图标。

Allow mutiple instaces:是否允许在同一个页面中有多个porltet的实例,默认为否。

CSS:当前porltet的自定义CSS。一般默认。

JavaScript:当前portlet自定义JS。一般默认。

CSS classname:当前portlet的命名空间,防止CSS和其他porltet冲突。

Category:当前的portlet,显示在哪个分类下面,这里是Liferay-display.xml文件的可视化编辑。

三、MVCPortlet的简单使用

可以看到在工程的com.huqiwen.study包下面生成了一个Demo的java文件,如果只是让portlet显示/html/demo/view.jsp里面的内容,则不需要在Demo.java文件里面添加内容。如果需要让view.jsp后从台初始化一些信息,则需要重写doView文法。view模式显示时调用doView方法,edite模式显示时调用doEdite方法,config模式显示时调用doConfig方法,依此类推。

在此大部分情况下可以将renderRequest当然HttpServletRequest使用。如果要转换可以通过PortalUtil.getHttpServletResponse(portletResponse)来进行转换。

可以使用renderRequest.setAttribute(arg0, arg1)方法,在前台页面通过JSTL等进行取值。

这里不详述,和普通的WEB程序基本一样。

四、其他

在二里面创建的内容都可以通过修改portlet.xml,liferay-portlet.xml,liferay-display.xml等来进行修改调整。创建向导包含的只是一些最通用的内容,一些高级的参数还需要通过修改porltet.xml和liferay-portlet.xml来完成。

通过向导默认porltet的view展现的JSP命名为view.jsp。此名称可以在docroot下面修改成相应的内容,实际开发中建议命名中和业务相关的,方便后期查找识别,如用户的可以命名成userView等,修改名称的同时需要修改Porltet.xml里面init-param对应的名称,否则会出现找不到页面的情况。

Portlet简述的更多相关文章

  1. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  2. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  3. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  4. Android网络定位服务定制简述

    Android 添加高德或百度网络定位服务 Android的网络定位服务以第三方的APK方式提供服务,由于在国内Android原生自带的com.google.android.gms服务几乎处于不可用状 ...

  5. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  6. 简述ASP.NET MVC原理

    1.为什么ASP.NET需要MVC? 因为随着网站的的数量级越来越大,原始的网站方式,这里指的是WebForm,在运行速度和维护性方面,以及代码量上面,越来越难以满足日益庞大的网站维护成本.代码的重构 ...

  7. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】

    原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...

  8. 【翻译】设计模式学习系列1---【Design Patterns Simplified: Part 1【设计模式简述:第一部分】】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part1/ Design Pattern ...

  9. Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现)

    前言 啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验.还有就是随 ...

随机推荐

  1. Python 开发轻量级爬虫01

    Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...

  2. 【Git】参与github上其他人的项目

    来源:廖雪峰 访问感兴趣的项目主页.,点“Fork”就在自己的账号下克隆了该项目仓库,然后,从自己的账号下clone到本地,就可以工作啦~ 以bootstrap项目为例,这个关系如下图所示: 一定要从 ...

  3. python安装paramiko模块

    一.简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...

  4. 实现Asp.Net Mvc4多级Views目录

    建立自己MyViewEngine类让他继承RazorViewEngine,之后在构造函数里面写入设置视图位置格式代码如下: public class MyViewEngine : RazorViewE ...

  5. MyISAM表的维护和恢复

    本节将讨论如何使用myisamchk检查和修复MyISAM表. 同时,你可以用myisamchk来检查,修复和优化数据库表.下面将讲述如何执行这些操作并建立维护计划. 虽然使用myisamchk很安全 ...

  6. 【SSO单点系列】(1):CAS4.0 环境的搭建

    一.概述 今天开始写CAS相关的第一篇文章,这篇文章主要是关于CAS环境的搭配,提供给刚刚接触CAS的一个入门指南,并演示一个CAS的最简单的实例 二.环境要求 博主的环境如下: win8.1 64 ...

  7. C#学习笔记-----C#枚举中的位运算权限分配

    一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算   得到的结果是 0011,也就是3  2.位预算有多少种?(我们就将几种我们权限中会 ...

  8. 数据结构和算法 – 11.高级排序算法(下)

    三.选择类排序 3.1.简单选择排序 http://www.cnblogs.com/tangge/p/5338734.html#XuanZe 3.2 堆排序 要知道堆排序,首先要了解一下二叉树的模型. ...

  9. EF – 问题集锦

    1.对一个或多个实体的验证失败.有关详细信息,请参见“EntityValidationErrors”属性 在EF5.0修改实体的时候,出现“对一个或多个实体的验证失败.有关详细信息,请参见“Entit ...

  10. Delphi中exit、break、continue等跳出操作的区别

    Delphi中表示跳出的有break,continue,abort,exit,halt,runerror等 1.break 强制退出最近的一层循环(注意:只能放在循环里:而且是只能跳出最近的一层循环) ...