Liferay Portlet指南(环境搭建)
更新时间:2024-05-12 06:11:01 阅读量: 综合文库 文档下载
- liferay推荐度:
- 相关推荐
Liferay Portlet指南
一、Liferay扩展环境搭建 环境设置
一、JDK 1.6.0, JDK 1.5.0 or JDK 1.4.2 1. 点击下一步安装
2. 设置环境变量“JAVA_HOME”指向jikes的目录 3. 增加“%JAVA_HOME%\\bin”到Path环境变量中
二、Jikes 1.22 or Jikes 1.21 1. 解压缩安装包
2. 设置环境变量“JIKES_HOME”指向jikes的目录 3. 增加“%JIKES_HOME%\\bin”到Path环境变量中 三、Ant 1.7.0
1. 解压缩安装包
2. 设置环境变量“ANT_HOME”指向ant的目录 3. 增加“%ANT _HOME%\\bin”到Path环境变量中
配置扩展环境
本指南所使用的liferay版本为4.2.2
Step1:解压源代码
将liferay源代码解压到任意目录,我们称之为${PORTAL_HOME}。本指南中,将liferay源代码存放在目录${PORTAL_HOME}\\src下。
Step2:修改release配置文件
在${PORTAL_HOME}\\src目录下找到文件release.properties,将其另存,命名为“release.${username}.properties”。其中${username}就是当前Windows登陆的用户名,可以通过“开始菜单-》运行-》cmd.exe”后显示的默认路径看到,跟在“Documents and Settings”字样后面的就是当前登陆的用户名。比如配置文件的名称是release.administrator.properties 。文件的内容如下:
修改lp.source.dir属性,来指定liferay源代码所在目录
lp.source.dir=${PORTAL_HOME}/src
修改lp.ext.dir属性,来指定liferay扩展环境放置目录
lp.ext.dir=${PORTAL_HOME}/ext
当然可以在源文件release.properties上修改,不过不建议这样做。
Step3:生成扩展环境 “开始菜单-》运行-》cmd.exe”,启动命令提示符窗口,进入到${PORTAL_HOME}\\src目录下(因为执行ant命令所需的build.xml在此文件夹下)。执行以下ant命令,生成扩展环境。
$ ant start $ ant build-ext
Step4:安装liferay tomcat
将liferay tomca解压到任意目录,我们称之为${CATALINA_HOME}。本指南中,将liferay tomca存放在目录${PORTAL_HOME}\\servers\\tomcat下。
Step5:修改app配置文件
在${PORTAL_HOME}/ext 目录下找到文件app.server.properties,将其另存,命名为“app.server.{username}.properties”。比如配置文件是app.server.administrator.properties。用来指向需要发布的liferay tomcat服务器。修改内容如下:
修改app.server.parent.dir属性,来指定服务器的父目录。
app.server.parent.dir=D:/servers/tomcat
修改app.server.tomcat.dir属性,来指定服务器所在目录。
app.server.tomcat.dir=${app.server.parent.dir}/tomcat-5.5.17 Step6:部署扩展环境 “开始菜单-》运行-》cmd.exe”,启动命令提示符窗口,进入到${PORTAL_HOME}\\src目录下(因为执行ant命令所需的build.xml在此文件夹下)。执行以下ant命令,部署环境。
$ ant deploy
Step7:建立数据库
在${PORTAL_HOME}\\src\\sql\\create目录下找到与你使用数据相对应的.sql文件。执行该.sql脚本建立数据库。脚本默认数据名为“lportal”。
Step8:拷贝JDBC Driver
将与你使用的数据库相应的JDBC Driver,拷贝到目录${CATALINA_HOME}\\common\\lib\\ext下。
Step9:修改数据库配置文件
在${CATALINA_HOME}\\conf\\Catalina\\localhost下,找到文件ROOT.xml。修改名字为“jdbc/LiferayPool”的
name=\ auth=\ type=\ driverClassName=\ url=\ username=\ password=\ maxActive=\ /> Step10:测试 进入到目录${CATALINA_HOME}\\bin下,点击“startup.bat”启动Liferay Tomcat服务器。打开浏览器,访问http://localhost:8080。点击“Sign In”,利用用户名:test@liferay.com、密码:test,进入系统。如果可以正常登录,即环境配置成功。 其他: liferay默认使用的jikes编译器来对Java文件进行编译。如果想使用JDK来进行编译,就需要修改配置文件。 在ext环境的跟目录下,有个build.properties文件。将其中javac.compiler的值修改为modern。 修改前: javac.compiler=jikes 修改后: javac.compiler=modern 转帖请注明出处。 我将陆续发布JSPPortlet、StrutsPortlet、PreferencePortlet、SSHPortlet,开发指南。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Pointer_v/archive/2008/10/08/3033181.aspx 到这 二、Liferay扩展环境目录介绍 扩展环境的目录结构如下图: 1、/ext-ejb/src 在基于二次扩展环境,进行功能开发时。自己编写的Java代码都放在这个目录下。 2、/ext/downloads 存放Ant脚本中可能用到的下载文件。 3、/ext/ext-ear 主要存放liferay编译生成的war包及jar等文件. 4、/ext/ext-ejb 该包是扩展开发环境中最为重要的包之一,开发过程中新开发的所有编译过的.class以及主要的配置文件均存放该包中。代码结构如下图: 其中最为常用的配置文件是: Language-ext.properties:Portlet国际化配置文件。(具体用法在后续章节中描述) ext-hbm.xml:Hibernate配置文件, 所有对象映射信息都存放于该文件中。(具体用法在后续章节中描述) ext-spring-professional.xml:Spring配置文件,存放Spring相关配置,目前不会用到ext-spring-enterprise.xml文件。(具体用法在后续章节中描述) 5、/ext/ext-lib 存放额外的库文件 6、/ext/ext-web 当基于liferay二次开发环境进行功能开发时,该目录存放JSP,HTML,图片等WEB相关文件。该目录是扩展开发环境中最重要的目录之一。代码结构如下图所示: 该目录中也存放了大量的配置文件,其中最为常用的配置文件有: portlet-ext.xml、liferay-portlet-ext.xml、liferay-display.xml:Portlet的配置文件,如果要增加一个Portlet,这三个配置文件都要修改。(具体用法在后续章节中描述) struts-config.xml、titles-defs.xml:如果要配置Struts Portlet就要用到这两个配置文件。(具体用法在后续章节中描述) 7、/ext/ext-web/tmp文件夹: 在部署过程中,ant脚本先解压/ext/ext-ear/modules/portal-web.war 文件,以及拷贝/ext/ext-web/docroot目录下的文件到/ext/ext-web/tmp中,之后在统一发不到Tomcat服务器的相应目录中。 8、layouttpl、themes 存放的是页面布局模板和主题包。自己扩展的布局模板和主题包也是放在该目录下。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Pointer_v/archive/2008/10/18/3096039.aspx 三、Liferay配置文件Tag标签参考 1、Icon Icon元素指定了一个在portlet中显示的图片 2、Virtual—path Virual—path 的值指定了一个虚拟路径用于覆盖默认的servlet内容路径.举个例子,假设你的portlet被部署在servlet路径”/test-portlet”. 通过默认值, portal将会返回到”/test-portlet”的servlet内容路径. 你可以通过设置虚拟路径到”/virtual”来覆盖默认路径, portal 就会返回到”/virtual”的servlet内容路径.默认值是””, 这意味着没有使用. 3、Struts-path 这个选项只在用Liferay Struts Portlet 框架时才有用. 假设struts—path的值是”mail”. 这就告诉了portal说所有的路径为mail/*的请求都在这个portlet’s领域的考虑范围之内.如果用户访问到这个portlet的话,只有路径匹配mail/*的用户请求才被允许访问. 这对于portlet 请求和标准的servlet请求同样适用. 4、Configuration-path Configuration-path 的值是一个Struts 路径,允许用户配置运行时的portlet. 5、Indexer-class Indexer-class的值必须是一个实现com.liferay.util.lucene.Indexer的类,并且被调用来创建,或者更新对于portlet的索引. 6、Open-search-class Open-search-class 的值必须是一个实现com.liferay.portal.kernel.search.opensearch的类, 并且以opensearch1.1的标准来被调用,以获得搜索结果. 7、Scheduler-class Scheduler-class的值必须是一个实现com.liferay.portal.job.scheduler的类, 并且被调用来确定这个portlet的Schedule Quartz jobs. 8、Portlet-url-class Portlet-url-class 的值必须是一个继承了com.liferay.portlet.portleturlimplwrapper 的类.指定这个类来覆盖默认的portlet URL实现. 9、Friendly-url-mapper-class Friendly-url-mapper-class 的值必须是一个实现com.liferay.portal.kernel.portlet.friendlyURLMapper的类.如果在portlet之内的内容要使用一个friendly URL 就要使用这个.它的使用例子在MessageBoards portlet中. 10、url-encoder-class url-encoder-class 的值必须是一个实现com.liferay.portal.kernel.servletURLEncoder的类.使用这个来建立一个自定义的URLEncoder,这个URLEncoder 是供RenderResponse 类来使用,用于实现encodeURL方法.在你需要添加自定义的逻辑来重写URLs时这个将会非常有用. 11、Portlet-data-handler-class Portlet-data-handler-class 的值必须是一个实现com.liferay.portal.kernel.lar.PortletDataHandler的类,并且当归档计划执行时被调用. 12、Smtp-message-listener-class Smtp-message-listener-class 的值必须是一个实现了com.liferay.portal.kernel.smtp.MessageListener 的类, 并且当传输电子信件时才被调用. 13、Preferences-company-wide 如果这个portlet 的参数在整个公司内都可以访问,就将Preferencescompany-wide 的值设定为true,.将这个值设定为true 意味着不能使用preference-unique-layout 和preferences-owned-by-group 的值.默认值是false.例如,管理员可以将这些参数放置于一个声明好的portlet中,这个portlet可以以信息的形式来记录portlet中的参数.这些信息在公司的所有页面中都能访问.这个portlet不能被实例化,因为实例化的portlet有唯一的自增长的portlet id.被封装的声明的portlet的默认的行为将实例化的值设定为true,以便普通用户不能创建公司全局信息.一个更深层的引用将会包括对编辑模式的许可,这种编辑模式是相对于浏览模式来讲,允许管理员设定信息而用户只能浏览信息. 14、Preferences-unique-per-layout 如果这个portlet 的参数对每个页面都是唯一的,就将Preferencesunique-per-layout的值设定为true..如果将其设定为false,这个portlet的参数将会在所有页面中被访问.默认值是true. 15、Preferences-owned-by-group 如果这个portlet显示在一个组的页面中并且这个portlet的参数是由这个组来决定的, 就将preferences-owned-by-group的值设定为true. 如果将其设定为false,这些参数将会一直被用户拥有.默认值是true. 假设股票portlet 有一个preferences-unique-per-layout, 将其设定为true并且将preference-owned-by-group设定为false.用户可以对于每个个人页面来指定不同的股票列表.也可以对每一个社区页面指定不同的股票列表. 假设股票portlet 有一个preferences-unique-per-layout, 将其设定为false并且将preference-owned-by-group设定为false. 用户可以指定一个股票列表可以在所有的个人页面中查看.也可以在一个社区页面指定一个股票列表. 假设股票portlet 有一个preferences-unique-per-layout, 将其设定为true并且将preference-owned-by-group设定为true. 用户可以对于每个个人页面来指定不同的股票列表.管理员可以在社区里指定对用户的portlet参数.管理员可以对每一个社区页指定不同的股票列表,这些页面之后可以被社区内的所有用户分享. 假设股票portlet 有一个preferences-unique-per-layout 将其设定为false并且将preference-owned-by-group设定为true. 用户可以指定一个股票列表可以通过所有的个人页面来分享. 管理员可以在一个社区页中指定对用户的portlet参数. 管理员可以指定一个股票列表可以通过一个社区的指定页面的所有用户来分享. 16、Use-default-template 如果portlet使用默认的模板来装饰和包装内容, 就将Use-default-template的值设定为true. 将其设定为false允许开发者组织和编辑portlet的整体输出内容.默认值是true.如果你想要你的portlet与其他portlet不同,或者如果你想要你的portlet输出内容没有边框,这个值就是最常用的方式. 17、Show-portlet-access-denied 如果用户展示的portlet 有一个不允许的访问信息, 就将Show-portletaccess-denied 的值设定为true, 此信息是由于这些用户不能访问这些portlet.默认值在poral.properties值指定. 18、Show-portlet-inactive 将Show-portlet-inactive的值设定为true, 如果用户展示的portlet有一个不活跃的信息,如果将其设定为false,如果portlet是不活跃的, 用户将不能显示出这个portlet.默认值在portal.properties中指定. 19、Action-url-redirect 将Action-url-redirect 的值设定为true, 如果这个portlet 的一个actionURL可以导致自动的重定向.这可以帮助防止重复提交. 默认值是false. 20、Restore-current-view 将Restore-current-view的值设定为true, 如果当切换至最大化和正常状态,portlet恢复到当前视图时.如果将其设定为false, portlet将会重新设定当前视图,当其切换至最大化和正常状态时.默认值是true. 21、Maximize-edit 将Maximize-edit的值设定为true, 如果当用户处于编辑状态,portlet正处于最大化状态时.这只影响默认的portal 图标, 并且此时这个图标不是portlet开发者能够编辑的.默认值是false. 22、Maximize-help 将maximize-help的值设定为true, 如果当用户处于编辑状态, portlet正处于最大化状态时.这只影响默认的portal 图标, 并且此时这个图标不是portlet开发者能够编辑的.默认值是false. 23、Pop-up-print 将pop-up-print的值设定为true如果portlet正处于弹出状态并且用户正处于打印模式,这只影响到默认的portal图标, 并且此时这个图标不是portlet开发者能够编辑的.默认值是true. 24、Layout-cacheable 将Layout-cacheable标记设定为true,如果在这个portlet所包含的数据不会改变除非页面布局或者portlet实体改变. 25、Instanceable 将instanceable的值设定为true, 如果portlet可以在一个页面中显示多次,如果将其设置为false, portlet只在页面中显示其一次. 默认值是false. 26、Private-request-attributes 将Private-request-attributes的值设定为true, 如果这个portlet不与其他portlet共享请求属性. 默认值是true. 27、Private-session-attributes 将Private-session-attributes的值设定为true, 如果这个portlet并不与其他的portal共享会话属性.默认值是true.性质”session.shared.attributes”在portal.properties指定了哪一个会话属性可以分享即使private-sessionattributes的值是true. 28、Render-weight 默认值是1.如果将其设定小于1, portlet就会表现出并行性,如果将其设定为1或者更高, portlet 就会显示出连续性. 拥有一个更高的render-weight 的portlets有更高的优先级,并且在有低级别的render-weight的portlet之前呈现出来.如果ajaxable值设定为false, 最好将render-weight的值设定为1. 这就意味着如果ajaxable设定为false,ajaxable可以覆盖render-weight的值. 29、Ajaxable 默认值为true. 如果将其设定为false,portlet将不能通过ajax来显示. 30、Header-css 设定CSS的相关联的路径,这些css是与portal的页面布局的头有关联的样式. 31、Header-javascript 设定javascript的相关联的路径,这些javascript是与portal的页面布局的头有关联的. 32、Add-default-resource 如果将Add-default-resource的值设定为false, porlet并不依附于页面而是动态加载,之后用户会发现他没有权限来查看这个portlet, 如果将Adddefault-resource的值设定为true,默认的portlet资源和权限被添加到页面中.用户可以查看这个portlet.大多数的portlets不受这种影响并且可以从这种灵活性中受益.然而,为了防止安全循环漏洞,默认值是false. 33、System 将system的值设定为true, 如果portlet是一个系统portlet, 用户不能手动添加portlet到他们的页面中.默认值是false. 34、Active 将active的值设定为true, 如果portlet是活跃的并且可供用户使用.如果将其设定为false, portlet将会不活跃或者不能让用户获取.默认值是true.这个设定值将会通过管理portlet在运行时改变. 35、Include 将include 值设定为true 如果portal 会使用这个portlet. 如果将其设定为false, portlet将会不能被portal使用. 默认值是true. 那些无论活跃或者不活跃的portlets,如果它们不包含在portal中,它们将不能被用户使用.由于这些portlets不会在系统中显示出来, 用户将不会知道这些portlet的存在. 这就使得Liferay开发者封装一系列的portlets在一个核心包中, 并且允许自定义的部署方式来开或者关独立的portlets或设定portlets. 这遵循了siebel和microsoft的捆绑所有在一个核心包中的并且用xml来配置或注册注入来打开或关掉所有特性或一些特性的模式. 我们并不推荐自定义的部署者通过移去具体的portlets来修改核心源文件, 因 为这防止了今后的轻松升级.最佳的打开或者关闭portlets的方式就是设定include元素. 这种方式来做事情的优点是变得非常易于部署Liferay. 所有的特性在一个包中都能使用,缺点是并不能优化所有的portlets, 所以你浪费了磁盘空间, 甚至可能导致一个微小的静态的内存印记.然而, 我们认为对于提供一个简单的安装和升级路径来说, 额外的磁盘空间和内存使用是一个很便宜的代价. 37、Role-mapper Role-mapper包括两个具体的名称role-name和role-link.role-name值必须是在portlet.xml中定义的一个具体用户.role-link值必须是Liferay用户存在于数据库中.role-mapper元素组织了这些值来映射从portlet.xml的用户到Liferay数据库中的用户. 这是必须的, 因为Liferay用户可能包含spaces无论portlet.xml中的用户包不包含spaces. 这也增加了额外的灵活性, portlet卖主并不需要知道任何关于Liferay’s用户的信息. 38、Role-name 参见role-mapper元素的简介 39、Role-link 参见role-mapper元素的简介 40、Custom-user-attribute 自定义的用户属性包括一些名称,这些名称是用一个自定义的扩展了ccom.liferay.portlet.customuserattributes的类.下载一个简单的关键可部署的portlet WAR 叫test.war. 找到类:com.liferay.portlet.teststruts.teststrutsuserattributes 来观察是否它关联了自定义的用户属性”user.name.test”与值”test name”.可以修改这个类来读取从其他数据库中自定义的用户属性,例如LDAP服务器,或一个web服务. 41、Name 参见Custom-user-attributer元素的简介 42、Custom-class 参见Custom-user-attributer元素的简介 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Pointer_v/archive/2008/10/18/3096131.aspx 四、JSP Portlet开发 JSP Portlet是开发中使用频率最高的开发方式,主要原因有两个: 1、 当配置好Portlet之后,只需要修改JSP文件。而JSP文件支持hot deploy,这就会在开发过程中节省好多等待ant deploy和liferay tomcat startup的时间。 2、 开发流程也相对简单。 推荐的JSP Portlet推荐开发流程如下图,当然也不用完全按照如下流程来做,只要完成相关 配置的修改即可。 Step1:创建目录myjspportlet 在目录?\\ext-web\\docroot\\html\\portlet\\ext下新建目录 。 Step2:配置Portlet 打开文件?\\ext-web\\docroot\\WEB-INF\\portlet-ext.xml(portlet-ext.xml是扩展环境中用来定义Portlet的配置文件)。 对于本例, 添加下列内容到你的portlet-ext.xml(你会发现它与EXT_1很相似,可以直接复制粘贴过去只需要做几个关键的改动)。 view plaincopy to clipboardprint?
注意:
1、 Portlets是通过,
下面是对每一个元素的简略介绍:
portlet-name
Portlet-name元素包括portlet的规范名称.每一个portlet的名称在portlet应用中都是唯一的.
display-name
Display-name类型包括一个短名称,意图是通过工具来显示它.这个名称通过display-name元素来使用.显示名称不一定唯一.
portlet-class
Portlet-class元素包括portlet名称的规范类.
init-param
Init-param元素包含一个名/值对,作为portlet的一个初始化参数.
expiration-cache
Expiration-cache定义了对于这个portlet的expirationbased缓存.这个参数以秒作为基准时间,在规定时间后portlet过期.-1意味着永不过期.
supports
Support元素包括了可支持的类型.support也指出portlet的模式.和portlet支持的具体内容类型.所有的portlet必须支持浏览模式.
portlet-info
Portlet-info定义了portlet的信息.
security-role-ref
Security-role-ref元素包括一个在Web 应用的代码中,安全角色含义的声明.具体在Liferay中,role-name的含义是规定 可以通过portlet的用户名称.(一个Power 用户可以自定义portal,而用户则不行)
现在你可以配置你的portlet-ext.xml
Step3:配置Portlet实例属性
添加Liferay具体信息到?\\ext-web\\docroot\\WEB-INF liferay-portlet-ext.xml。 对于本例, 添加下列内容到你的liferay-portlet-ext.xml中即可。
view plaincopy to clipboardprint?
注意:
这里的
Step4:定义Portlet名称
为了能够在portal 中方便查找添加你的portlet, 你需要在?\\ext-ejb\\classes\\content Language-ext.properties中定义名称,通过添加下面这一行:
view plaincopy to clipboardprint?
javax.portlet.title.EXT_2=My JSP Portlet
其中的key值(即javax.portlet.title.EXT_2),是“javax.portlet.title”+“portlet名字”(即在portlet-ext.xml中添加的portlet的
Step5:归类Portlet
定向到?\\ext-web\\docroot\\WEB-INF\\liferay-display.xml。按照你的需要, 添加Portlet归类信息,把你所创建的portlet放入相应的位置。 view plaincopy to clipboardprint?
以上信息主要是为了在添加应用窗口中显示定义的portlet。如果做了Step3,那么最
终在添加应用窗口中显示是第三步所定义的名字。在本例中将显示“My JSP Portlet”。添加应用窗口如下图所示,因使用liferay版本不同页面效果会不太一样。
Step5:创建init.jsp
在你的/myjspportlet目录下,添加一个文件叫init.jsp.在这个文件中,添加下列两行代码: view plaincopy to clipboardprint?
<%@ include file=\
这两行代码导入了所有通用类,并且注入了每个portlet使用的通用变量。如果你需要导入portlet具体类或者初始化portlet具体变量。确定要将他们添加到他们的具体目录下的文件init.jsp中, 这是相对于/html/common/init.jsp来说的。
Step6:创建view.jsp
现在,添加一个view.jsp。这个jsp文件将会显示你的JSPPortlet中的内容。本教程中,在jsp中写下“Hello[你的名字]”。问题出来了,portal如何得知怎样加载这些特殊的文件?如果你返回观察添加到portlet-ext.xml中的portlet元素,你将会观察到你初始化了一个view-jsp参数,它的值是/ext/myjspportlet/view.jsp。通过指定这个init-param,你将使得portlet加载一个
默认的JSP。
Step7:测试
因为你现在肯能已经搭建起环境,你需要通过在ext目录下执行ant deploy部署这些你做的对你的应用的改变。
访问地址:http://localhost:8080。
利用用户名:test@liferay.com;密码:test登录进入系统。
在选择应用的窗口中选择我们刚刚添加的Portlet——My JSP Portlet,如果在页面上会增加一个Portlet(如下图),显示出你刚刚添加的内容,那么部署就成功了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Pointer_v/archive/2009/02/12/3882704.aspx
五、Struts Portlet开发 注意:
以下内容是基于Liferay 4.2.2,如果使用Liferay5.1.X版本有些地方是不一样的,在这里就先不细说了。
建议开发流程如下:
为什么用Struts?
1、Struts实现了MVC.虽然有其他框架实现MVC,Struts是最广泛应用和最成熟的技术. 2、什么是MVC?MVC将显示代码从业务逻辑中分离出来.
3、Struts在struts-config.xml中提供了集中的页面流管理.这使得它高度可升级并且使得你模块化代码流程.
4、通过使用struts,你可以使用一些最佳实践,已经集成在框架中.
为什么用tiles?
一个页面布局是一个使用包含典型声明的设计.如果有100个JSPs并且头和尾都需要改变,所有的100JSPs都需要改变.用tiles,一个简单的模板可以被用于定义页面布局.只要模板改变,所有页面将会依次改变。
Step1:配置Portlet
添加portlet配置信息到?\\ext-web\\docroot\\WEB-INF\\portlet-ext.xml中。 对于这份指南, 添加下列内容到你的portlet-ext.xml。 view plaincopy to clipboardprint?
Step2:配置Portlet实例属性
添加Liferay具体信息到?\\ext-web\\docroot\\WEB-INF liferay-portlet-ext.xml。 对于这份指南, 添加下列内容到你的liferay-portlet-ext.xml中即可。 view plaincopy to clipboardprint?
1、
2、 这里的
Step3:定义Portlet名称
定向到?\\ext-ejb\\classes\\content\\Language-ext.properties添加: view plaincopy to clipboardprint? javax.portlet.title.EXT_4= Library
其中的key值(即javax.portlet.title.EXT_4),是“javax.portlet.title”+“portlet名字”(即在portlet-ext.xml中添加的portlet的
Step4:归类Portlet
定向到?\\ext-web\\docroot\\WEB-INF\\liferay-display.xml,添加Portlet归类信息如下: view plaincopy to clipboardprint?
以上信息主要是为了在添加应用窗口中显示定义的portlet。如果做了Step3,那么最终在添加应用窗口中显示是第三步所定义的名字。在本例中将显示“Library”。添加应用窗口如下图所示,因使用liferay版本不同页面效果会不太一样。
Step5:定义Struts页面流
在配置文件?\\ext-web\\docroot\\WEB-INF\\struts-config.xml中定义struts页面流。 view plaincopy to clipboardprint?
注意:
这里的path=\值就是portlet-ext.xml中对应的view-action的值。 view plaincopy to clipboardprint?
Step6:定义tiles页面布局
在配置文件?\\ext-web\\docroot\\WEB-INF\\tiles-defs.xml中定义页面布局。 view plaincopy to clipboardprint?
这理portlet.ext.library 继承 portlet。这意味着portlet.ext.library将会使用 portlet.jsp 作为它的模板。portlet.ext.library.view 继承 portlet.ext.library。这意味着portlet.ext.library.view portlet.ext.library也将会使用 portlet.jsp 作为它的模板. 注意: 这里的name=\值就是struts-config.xml中对应的forward=\的值 说明:StrutsPortlet的数据流转,如下图: Step7:创建目录library 创建一个叫library的目录,你的目录结构应该像这样: ?\\ext-web\\docroot\\html\\portlet\\ext\\library。 Step8:创建init.jsp 在library中创建init.jsp你的目录结构应该像这样:?\\ext-web\\docroot\\html\\portlet\\ext\\library\\init.jsp。输入下列内容到init.jsp中: view plaincopy to clipboardprint? <%@ include file=\ 看看我们在这行中包含了什么? view plaincopy to clipboardprint? <%@ include file=\ 实际对应目录是:?\\portal\\portal-web\\docroot\\html\\common\\init.jsp。这将会让我们使用Liferay 标签库 Step9:创建view.jsp 在library中创建view.jsp文件。在本例中,可以直接复制如下代码。 view plaincopy to clipboardprint? <%@ include file=\ Add a book entry to the Library: 这将会让我们使用在上一步这定义的init.jsp Step10:创建成功和错误页面 在liberay目录下面创建文件error.jsp和success.jsp,内容分别是“ERROR!”和“SUCCESS!” 我们可以在成功页面中显示一些内容。 view plaincopy to clipboardprint? <%@ include file=\ <% String bookTitle = request.getParameter(\ %> <%= bookTitle %> Step11:创建Action类 创建 action 类来处理提交,AddBookAction.java。 view plaincopy to clipboardprint? package com.ext.portlet.library.action; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletConfig; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.liferay.portal.struts.PortletAction; public class AddBookAction extends PortletAction { public void processAction(ActionMapping mapping, ActionForm form, PortletConfig config, ActionRequest req, ActionResponse res) throws Exception { String bookTitle = req.getParameter(\ if (null == bookTitle || \ setForward(req, \ } else { setForward(req, \ } } public ActionForward render(ActionMapping mapping, ActionForm form, PortletConfig config, RenderRequest req, RenderResponse res) throws Exception { if (getForward(req) != null && !getForward(req).equals(\ return mapping.findForward(getForward(req)); } else { return mapping.findForward(\ } } } Step12:测试框架部署 利用命令Ant deploy。部署文件到Tomcat服务器,需要重新启动服务器。检验文件是否部署到tomcat。 定向到? \\tomcat\\webapps\\ROOT\\WEB-INF 打开portlet-ext.xml,liferay-portlet-ext.xml,struts-config-ext.xml和tiles-defs-ext.xml检查文件是否部署正确。 定向到? \\tomcat\\webapps\\ROOT\\html\\portlet\\ext\\library 打开view.jsp,检查文件是否部署正确。 定向到? \\tomcat\\webapps\\ROOT\\WEB-INF\\lib 打开ext-impl.jar,检查文件AddBookAction是否部署正确。 启动服务器,访问http://localhost:8080。 登录系统,用户名:test@liferay.com。密码:test。 调出添加应用页面,找到添加的portlet。本例中,找到library。操作一下,看看是否可以看到成功页面。 本文来自CSDN博客,转载请标明出处http://blog.csdn.net/Pointer_v/archive/2009/02/12/3882749.aspx 六、Configuration Portlet开发 注意: 以下内容是基于Liferay 4.2.2版本,对于Liferay 5.1.X有很大的不同 对于这份指南,Configuration Portlet的开发流程采用的也是Struts Portlet的开发流程。 Step1:配置Portlet 添加portlet配置信息到?\\ext-web\\docroot\\WEB-INF\\portlet-ext.xml中。 对于这份指南, 添加下列内容到你的portlet-ext.xml。 view plaincopy to clipboardprint? : Step2:配置Portlet实例属性 添加Liferay具体信息到?\\ext-web\\docroot\\WEB-INF liferay-portlet-ext.xml。 对于这份指南, 添加下列内容到你的liferay-portlet-ext.xml中即可。 view plaincopy to clipboardprint? 注意: 1. 2. 这里的 Step3:定义Portlet名称 定向到?\\ext-ejb\\classes\\content\\Language-ext.properties添加: view plaincopy to clipboardprint? javax.portlet.title.EXT_3=Default Message 其中的key值(即javax.portlet.title.EXT_3),是“javax.portlet.title”+“portlet名字”(即在portlet-ext.xml中添加的portlet的 Step4:归类Portlet 定向到?\\ext-web\\docroot\\WEB-INF\\liferay-display.xml,添加Portlet归类信息如下: view plaincopy to clipboardprint? 以上信息主要是为了在添加应用窗口中显示定义的portlet。如果做了Step3,那么最终在添加应用窗口中显示是第三步所定义的名字。在本例中将显示“Default Message”。添加应用窗口如下图所示,因使用liferay版本不同页面效果会不太一样。 Step5:定义Struts页面流 在配置文件?\\ext-web\\docroot\\WEB-INF\\struts-config.xml中定义struts页面流。 view plaincopy to clipboardprint? 注意: 这里的path=\值就是portlet-ext.xml中对应的view-action的值。 view plaincopy to clipboardprint? 这里的path=\\值就是liferay-portlet-ext.xml中对应的标签 Step6:定义tiles页面布局 在配置文件?\\ext-web\\docroot\\WEB-INF\\tiles-defs.xml中定义页面布局。 view plaincopy to clipboardprint? 这理portlet.ext.defaultmessage.view 继承 portlet。这意味着portlet.ext.defaultmessage.view将会使用 portlet.jsp 作为它的模板。portlet.portlet_configuration.edit_configuration道理相同。 注意: 这里的name=\值就是struts-config.xml中对应的forward=\的值。 这里的name=\值就是struts-config.xml中对应的forward=\的值。 Step7:创建目录defaultmessage 创建一个叫defaultmessage的目录,你的目录结构应该像这样: ?\\ext-web\\docroot\\html\\portlet\\ext\\defaultmessage。 Step8:创建init.jsp 在defaultmessage中创建init.jsp你的目录结构应该像这样:?\\ext-web\\docroot\\html\\portlet\\ext\\ defaultmessage \\init.jsp。输入下列内容到init.jsp中: view plaincopy to clipboardprint? <%@ include file=\ 看看我们在这行中包含了什么? view plaincopy to clipboardprint? <%@ include file=\ 实际对应目录是:?\\portal\\portal-web\\docroot\\html\\common\\init.jsp。这将会让我们使用Liferay 标签库 Step9:创建view.jsp 在defaultmessage中创建view.jsp文件。在本例中,可以直接复制如下代码。 view plaincopy to clipboardprint? <%@ include file=\ String defaultMessage = (String) request.getAttribute(\ %> <%=defaultMessage %> <%@ include file=\ 这将会让我们使用在上一步这定义的init.jsp Step10:创建config.jsp 在defaultmessage中创建config.jsp文件。在本例中,可以直接复制如下代码。 view plaincopy to clipboardprint? <%@ include file=\ <%@ include file=\ Setup the default message: <%@ include file=\ 这将会让我们使用在上一步这定义的init.jsp Step11:创建Action类 创建 action 类来处理信息,DefaultMessageViewAction.java。 view plaincopy to clipboardprint? package com.ext.portlet.defaultmessage.action; import javax.portlet.PortletConfig; import javax.portlet.PortletPreferences; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.struts.PortletAction; import com.liferay.util.Validator; public class DefaultMessageViewAction extends PortletAction { public ActionForward render(ActionMapping mapping, ActionForm form, PortletConfig config, RenderRequest request, RenderResponse response) throws Exception { PortletPreferences prefs = request.getPreferences(); String defaultMessage = prefs.getValue(\ if (Validator.isNull(defaultMessage)) { return mapping.findForward(\ } request.setAttribute(\ return mapping.findForward(\ } } DefaultMessageConfigAction.java view plaincopy to clipboardprint? package com.ext.portlet.defaultmessage.action; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletConfig; import javax.portlet.PortletPreferences; import javax.portlet.RenderRequest; import javax.portlet.RenderResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.struts.PortletAction; import com.liferay.portlet.PortletPreferencesFactory; import com.liferay.util.ParamUtil; import com.liferay.util.servlet.SessionMessages; public class DefaultMessageConfigAction extends PortletAction { public void processAction(ActionMapping mapping, ActionForm form, PortletConfig config, ActionRequest request, ActionResponse response) throws Exception { String defaultMessage = ParamUtil.getString(request, \ if (defaultMessage != null) { String portletResource = ParamUtil.getString(request, \ PortletPreferences prefs = PortletPreferencesFactoryUtil.getPortletSetup(request, portletResource, true, true); prefs.setValue(\ prefs.store(); SessionMessages.add(request, config.getPortletName() + \ } } public ActionForward render(ActionMapping mapping, ActionForm form, PortletConfig config, RenderRequest request, RenderResponse response) throws Exception { String portletResource = ParamUtil.getString(request, \ PortletPreferences prefs = PortletPreferencesFactory.getPortletSetup(request, portletResource, true, true); String defaultMessage = prefs.getValue(\ request.setAttribute(\ return mapping.findForward(\ } } Step12:测试框架部署 利用命令Ant deploy。部署文件到Tomcat服务器,需要重新启动服务器。检验文件是否部署到tomcat。 定向到? \\tomcat\\webapps\\ROOT\\WEB-INF 打开portlet-ext.xml,liferay-portlet-ext.xml,struts-config-ext.xml和tiles-defs-ext.xml检查文件是否部署正确。 定向到? \\tomcat\\webapps\\ROOT\\html\\portlet\\ext\\defaultmessage打开view.jsp和config.jsp,检查文件是否部署正确。 启动服务器,访问http://localhost:8080。 登录系统,用户名:test@liferay.com。密码:test。 调出添加应用页面,找到添加的portlet。本例中,找到Default Message。 因为还没有配置信息,所以初始状态显示的是页面“/portal/portlet_not_setup”中的内容。点击【Configuration】按钮,跳转到配置页面。 输入信息,提交之后,返回正常页面。如果显示如下内容,那么配置就成功了。 本文来自CSDN博客,转载请http://blog.csdn.net/Pointer_v/archive/2009/02/12/3882817.aspx 标 明 出 处 :
The default message is:
<%
正在阅读:
试论高校体验式思想政治教育07-19
一件难忘的事07-17
道岔打磨车作业指导书 - 图文10-20
信息技术2.0培训文本作业_A1_学情分析方案.doc03-27
2018超星尔雅《逻辑学导论》课后练习答案期末考试题答案二06-16
纺纱学答案 - 图文10-10
装饰工程定额与预算04-27
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 搭建
- Liferay
- Portlet
- 环境
- 指南
- 2100AN台式浊度仪使用说明书 - 图文
- 大兴区2009初三数学答案
- 再谈色彩管理与ICC文件
- 2012年高考研讨复习讲稿物理 - 图文
- 优化乘务组织提高乘务效率(毕业论文)
- 实习相关表格
- 2015年初级社会工作者《工作实务》真题及答案
- 翻译实践译文 - 图文
- 档案学概论
- 幼儿园阳光体育活动总结范文两篇
- 2016年高考地理考点大揭秘:自然地理最新题型综合检测(含答案)
- 地藏经诵读仪规
- AIX5安装
- 2015年中考数学第24题专题训练答案
- 有关电磁感应的几个小专题
- 2008浙江行测真题及解析
- 2013MBA联考逻辑习题及精解
- 步进电机实验报告
- 2016年4月上海市虹口区初三物理二模试卷(word版 含答案)资料
- VB实现贪吃蛇小游戏