版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1Liferay开发平台的价值portalliferay第1Liferay开发平台的价值portalliferay网1-1关于本教内程序员开发liferay6.2的参考手册。QQ客服:1229173104(QQ)58487128(QQ群1-2 为Liferay开发应用程Wikipedia上是这样定义一个internet或portalwebPortal借portal平台所提供的功能可以达到减少开发时间成本和一个对用户来说一致LiferayPortal之上进行开发应用的程序员,你会问最好的快速开发的路径是什么?Liferay支持两种主要的基于标准技术的方案:portlets和OpenSocialgadgets.Portletsjavawebweb页面portalportlets,因为它们包含了实际的功能,一个portlet容器紧紧是让一组合适的portlets组合在一起作为一个完LIFERAY6.2开发平台1[LIFERAY6.2开发平台2liferay实[LIFERAY6.2开发平台2liferay实指定的框架:MVCPortletAlloyPortlet.portletsjava平台的完OpenSocialOpenSocialGadgets通常是小的应用,用浏览器端的技术编写,例如HTML,JavaScript.类似portlets,OpenSocialGadgets提供了标准的方法来为portalportlets则可以实现任意类型的应用。因此,OpenSocialgadgets除了包括一OpenSocialgadgetliferaygadget:在远程服务器上执行,但是在另外的平台程序中展现获取的信gadgetportalgadget来用远程gadget.gadget:liferayserverportletsgadget在一个xml文件中定义,下载该文件就可以完成对该gadget的部署。一旦你保存了一个新的gadget它就可以让管理员添加到站点的页面上。远程的remotegadget添加到其他的portals上的页面上,或是社交网络上。复用已经存WEB应用如果你有个没portlet的应用OpenSocialgadget,应该怎么办?你有下面的几个选择:重写应用为一个生成简单的portlets负责与应用交互,并向最终用户提供服务。生成OpenSocial对应用进行封装,gadget可以使IFrame来在一生成OpenSocial对应用进行封装,gadget可以使IFrame来在一个portal页面上展示应用的一部分。生成一个portlet来整合远程应用可以使用IFrame或是一个http代理(例如使用LiferayWebProxyportlet),这种方案需要portal应用之间实现单点登录。如果该应用是使用实现的,可以经过小的改动转为如果该应用是jsf来实现可以经过小的改动来转为得到支持的技术框Liferay做为一个平台,可以很好的与任意的java技术相兼容,这需要portletj2ee设计架构标准portlet应用都可以使用它自己的一组库和技术模块管它们是否被liferay采用。该部分我们重点推荐portlet组件;其他类型的插件则有较多的限制,例Ext插件只允许使用与liferay核心代码使用的库相兼容的库。(gwt当不确定的时候,选择相对简单的解决方案:portlet应用通常要比独立的或Alloyportlet.gwt,vaadinJSP的案例(ICEfacesRichFaces).你也许会JavaScriptLiferay来使用任意的脚本库,例如jQuery,Dojo,YUI,Sencha(以前叫做ExtJs),和Sproutcore.Liferay的服务构建器可以为数据库持久化自动生成类和接口及服务层。它口。在portal实例上的对象与本地接口交互,而外部的对象与远程接口交互,通过JSON,SOAP和JavaRMI.LIFERAY6.2开发平台3[LIFERAY6.2开发平台41-3节扩展和自定义Liferay[LIFERAY6.2开发平台41-3节扩展和自定义Liferay提供了很多非常好的特性:包括一个功能丰富的内容管理系统,一个社Liferay被设计成可被自定义的架构,它的很多插件和插件类型可以组合应用到war自定义展示themes让你可以灵活定义web站点的外观,你可以指定颜色的图片,你可 界面元素上应用样式表,例如字体,连接,索栏,页头,和页脚,通过集成css和Velocity或FreeMarker模板Liferay的AlloyUIAPI框架,你可以使用一个统一的接口在通ui元素上ui元素则组成了web页面,这成站点非常容且这些站点可以对桌面访问客户访问客户手机设备访问客户都可以展示良好的页面重要让你集中精力在设计站点 而不是实现 所具备的通用功能上添加新的预定义页面布局:布局模板Layout布局类似主题,但是它主要集中在设定portlets自定义或扩展开箱即自定义或扩展开箱即用功能:Hook插件Hookliferay核心功能的插件,hookportalportal启动,关闭,登录,登出,会话生成,会话销毁阶段执行特到自定义功能。Hookportletsjsp模板,最有趣的是hooks也像portlets那样支持热部署。高级定制Ext插件ExtLiferay核心功能实现的定制,允许你用自己的实这个原因,Ext插件仅仅被建议用在的确需要高级别定制的情况,且没有其他可liferayExt插件不会影Ext插件才会起作用。1-4节选择你的开发工具命令行环境,该环境下可以集成范围非常广的工具。2)IDE来最小Apacheant和PluginsSDK:liferay提供的开发环境被称为PluginsSDK,让你通过执行一组预定义的命令来开发各类型的插对Apacheant的支持.LIFERAY6.2开发平台5[LIFERAY6.2开发平台6EclipseLiferayIDE:EclipseIDE[LIFERAY6.2开发平台6EclipseLiferayIDE:EclipseIDE非你在执行一个LiferayIDE不支持的高难度操作。为了开发该开发工具是LiferayIDE的扩展。Liferay应用,如果我倾向Maven该如何如果我喜欢NetBeans,IntelliJ 或其他IDEsEclipseLiferay权利。事实上,许多核心的开发者都在使用NetBeans和IntelliJIDEA,这两款ide是为开发liferay插件而设计的,你可以在下面的地址找到更多的PortalPack,OK,liferay概要介绍到这里结束了,现在让我们开始真正的开发工作第2章Liferay平台开发工具IDEIntelliJIdeaNotepad,Emacs等。你可以通过sqljdbchibernateiBATIS,这样就可以满足你的需求了。应用PluginsSDKMaven2-1节Liferayliferay2-1节Liferayliferayjava程序员,我们都推荐使用LiferayIDE,LiferayIDEPluginsSDKmavenliferay运行时环境,你Liferaybuilddeploy你的插件到你的liferay实例。你可以从更新站点像安装一组Eclipse插件那样,安装LiferayIDE.最新版本的LiferayIDEportlets,hooks,Ext插件的开发,为了使用liferayIDEindigoj2eeEclipseEclipseLiferayIDE,及如何建立项目,并把项目部署到portal,你将能体会到使用LiferayIDE开发项目所带来的易用性和高效率。我们还会介绍下Liferay的服务Builder.它帮助你应用Hibernate对象关系映射的liferayJava版本,我们接下来会演示这个过程,基于你是否会进入一个更新站点获取Eclipse我们提供两种方案。预备工作JAVAJREeclipseJava6.0JREEclipseJunoJavaEE(4.2.x)EclipseIndigoJavaEE(3.7.x)LIFERAY6.2开发平台7[LIFERAY6.2开发平台8安装步骤[LIFERAY6.2开发平台8安装步骤EclipseHel-->iallnewIDE/2.0.0GA1/updatesite/按回车键5.LiferayIDE可选安装EclipseKepler,Juno,IndigoEclipse从/projects/lportal/files/Liferay EclipseHel-->InallNewAddsiteArchiveliferayIDEEclipseLiferayIDE安装正确HelEclipseLiferayIDE安装正确Hel-->AEclipseLiferayIDE图标配Liferayliferayportal和测试你的自定义设置了。LiferayPluginSDK6.0.5portal版本匹配,同时也要确保maven被安装。EclipseIDEliferayIDE扩展。liferayPlugin安liferayliferaysdkmaven,liferayportalliferayIDE中进行了相关设置,这里需要说明的是,PluginSDKmavenLiferayIDE在这里只是用最简单的方法来使用PluginSDK:LiferayIDEPluginSDK.1,EclipseInstalledPluginSDKswindows下拉菜单,单击Preerences-‐>fea-->instaedPluginSdks.ok,sdkLiferayPluginsdksliferayportal运行时和服务器安装在 下开 对话框,wndw--Pene--‐>rver- LIFERAY6.2开发平台9单击finish;你应该可以看到你的 运行在Prfeenc-->rruntimeEnvironments列表里。点击OK来保存你的运行时参考。1[LIFERAY6.2开发平台测试liferay服务器liferayportalEclipseservers下启动,你有点击红色的stop服务器按钮来停用服务器(Ctrl+ALT+S)键单击你的liferaytomcatserverOpenLiferayPortalHome.liferayIDEliferay项目,如果你阅读并按PluginSDKliferayportal服务LiferayIDELiferayIDE中生成第一个liferay插件项目吧。生成Liferay项目LiferayPortalliferayLiferay去il-->e--‐LfeayPluginLIFERAY6.2开发平台12.1提供项目名字,该名字被命名项目的目录,同时提供一个展示名,展示liferayportalplugin.Demo会拥有一个ee2.1提供项目名字,该名字被命名项目的目录,同时提供一个展示名,展示liferayportalplugin.Demo会拥有一个een00-‐eworl-‐pott的项目及hielearn007的展示名。选中Antieray--‐uin-‐sdk作为你的build类型,如果你需要用2.4sdkliferaytemplate,theme,和ExtServicebuilderportlets,所以请确认serviceBuilderportlet被选中。een00-‐erl--‐poteclipsepackage浏览器里,PROJECT-docroot/WEB-o1[LIFERAY6.2开发平台build.xml-Commonprojectbuild.xml-Commonprojecto-Commonproject无论什么类型的项目,都会生 文件ifera--‐lun-agepropeisCommonprojectfile进行了build.xmlliferayIDEant来自动编译和部署你的插件,而另外的文件iea--lun-cgepropeis文件则包含了你项目的重要元数据。LiferayIDE的属性视图会让你对该文件的属性字段进行管理,包括你项目的依赖关系,部署场景,展示名,及liferay版本。如果你把你的项目当作一个应用发liferay应用商店liferay--un-cgepropeis文件中的name属性就会被当作该应用的名字,接下来你需要把你的新插件项目部署到你的liferay服LIFERAY6.2开发平台1部署liferay项目到liferay服务部署liferay项目到liferay服务你的在服务器视图里的liferay运行时,另外你也可以使用下面的方法:serversliferay服务选择添加和移除点击Finish.1[LIFERAY6.2开发平台新portlet可以被使用的信息。打开liferayportal主页(http://localhost:8080/新portlet可以被使用的信息。打开liferayportal主页(http://localhost:8080/)administratorAd--‐MreSample分类,然后点击你新的插件,后点击添加,即可完成让刚发布的插件显示在web页面上。目里,在开始之前,我们首先修改下项目默认生成的portlet项目e:1,打开otw-ifa-dp.mLIFERAY6.2开发平台1id="elearn007-helloworld"2,打文件删id="elearn007-helloworld"2,打文件删3,打开docroot/WEB-INF/portlet.xml文件,移除4docroot/view.jsp生成插件成了新的项目een00-helrd 项目,而且你生成了一个lr00-‐hellowrl--teearn00-‐heloworld演示在已经生成的liferay项目里生成插件的通用步骤。在后面的部分,现在让我们学习如何生成地址插件和事件插件在er0-hlwrd项目上。liferayIDEeen00-helrl。因为它是址portlet开始吧。打开tWE-Iiey- 文件,并删1[LIFERAY6.2开发平台1,eear00-‐eo1,eear00-‐eorl--‐pott项目在包浏览器,并且选择ew-->LiferayPortlet.中,包全限定名 com.elearn007.portletdemo,而com.liferay.portal.kernel.portlet.LiferayPortlet或者javax.portlet.GenericPortlet做为你的超类。继承类为LIFERAY6.2开发平台13,该窗口为liferayportlet向导,你将为3,该窗口为liferayportlet向导,你将为你的portlet设置部署描述。首展示名和标题;Elearn007LocationListing。在本窗口你还可以指定portlet定JSp文件的生成路径。在liferay展示部分,你可以制定分类,是否添加到控制台等,通常该窗1[LIFERAY6.2开发平台LIFERAY6.2开发平台1的右键单击,并单击redeploy重新部署即可。现在你已经生成和部署了和elearn007EventLListing的右键单击,并单击redeploy重新部署即可。现在你已经生成和部署了和elearn007EventLListingportlet,从同一个项目,而且,locationlistingportlet完成后允许用户输入到可用的事件地址中。ServiceBuilder工具是如何帮助你生成你的service 图形编辑器使ServiceBuilder是一个模型驱动代码生成器,让你定义自己的实体。ServiceBuilderservice.xml并且自动生成你的应用模ServiceBuilder?portlets访问共同的数portal环境的底层框架。如果你的数据用程序代码中。ServiceBuilderjar文件中,该jar文件属于一个插件,但是它可以在所有的portlets中共享。LiferayIDE中,你可以添加码模式,可以让你直接手工修改编辑service.xml文件。使用liferayIDE生成你的服务层非常容易,你需要首先生成2[LIFERAY6.2开发平台service.xmlil->ew-service.xmlil->ew-‐f,ServiceBuilder.docrow-nr目录下生成service.xml文件,并且在总览模如果你一直按照本手册进行实际练习,那么你已经有了一个service.xml文件,因为我们在进行项目建立的时候,已经生成了servicebuilderportlet.将向你演示如何使用servicebuilder来部署和模块化我们的service.xml你可以建立服务。在在哦哦那广阔模式下浏览service.xml,你会看到在窗口的右角边有个按钮。作d该过程结束后,会在doroot/w-ir目录下生成一个新的java读servicebuilder章节以彻底了解它的能力。现在你已经知道了从零起步生成项目和plugin了,你了解了servicebuilder的高效率,省时间,那么现在我们了解下如何导入已经存在的项目到LiferayIDE.导入已经存在的项目从一个pluginsdk环境下PluginsSDKliferay程非常简单,不要担心如果存在.project或.classpath文件的情况,这个过程里LIFERAY6.2开发平台2LiferayIDE的远程服务适配器LiferayIDE的远程服务适配器IDEliferay应用商店下载安装,rer-maer-wb插件,提供了关于远程操作api.需要下载liferayIDEliferay的下载页面或是下载liferaydeveloperstudio从定制门户。liferayportalceEEliferayportalceeeportal管理员的登陆认证(例如用户名,用户密码)为你的远程服务器;你需要它们来配置你的链接从你的liferayIDE到你的远程服务器。配置远程服务适配器liferayIDEIDEliferay实例。另外你也可以把它安装启动liferayIDE2[LIFERAY6.2开发平台Fi-->e--‐Ot;选择服务器类型,单击Fi-->e--‐Ot;选择服务器类型,单击next.在的格式进行填写完成后(liferay@ip),点击Next.过浏览你的liferay安装目录并单击next.HTTP端口号保留liferayportalcontext路径和servermanager你的远程liferayportal实例需要远程IDE连接程序,否则liferayIDERemoteIDEportalFinish就可以完eclipseJAVA调试器被自动附使用远程服务适配器Addfinish成了一个build后进行,当然也可以人工发布。LIFERAY6.2开发平台22-2节PluginsJAVA程序员可以使用很多的工具和开发环境,liferay努力不懈的保留工具的相对独立,所以你可以选择你最满意的开发工具,如果你不向使用liferayIDE,2-2节PluginsJAVA程序员可以使用很多的工具和开发环境,liferay努力不懈的保留工具的相对独立,所以你可以选择你最满意的开发工具,如果你不向使用liferayIDE,liferay’spluginsSoftwareDevelopmentKit(SDK),pluginsdkApacheAnt的,可以被任何编辑器使用或是整合到不同的开发环境中。及可以利用的anttargets并且分享好的应用经验。tomcat的安装套件,因为它小,快,占用的资源相对少,尽管你可以使用其他的应用服务器,但是这里我们仍然采用tomcat.PluginSDKpluginsdkCServiceBuilder运行成功。提示:默认情况下,liferayportalCE版自带了很多插件,通常情况下需ly-prta--‐[vrio]/oat--‐cat--‐verion]/webapps删除除ROOT,markee-‐pott和nn--‐wb外的所有目录。配从2[LIFERAY6.2开发平台ANT_HOMEant安装路径,然后把$ANT_HOME/bin路径添加到你的电脑环境变量path中。在类UNIX(linux,MacOSX)系统上,如果你的ANT_HOMEant安装路径,然后把$ANT_HOME/bin路径添加到你的电脑环境变量path中。在类UNIX(linux,MacOSX)系统上,如果你的ant安装路径为ahe--‐ant--<versio并且是Bash,设置环境变量可以在.bash_profile中在变量名变量值:{antinstallation单击OK,并关闭所有系统属性窗口。键入:antversionPluginsApacheAnt(TM)version<version>compiledLIFERAY6.2开发平台2[LIFERAY6.2开发平台PluginSDK,liferay的安装位置,这样它可以使用liferay的[LIFERAY6.2开发平台PluginSDK,liferay的安装位置,这样它可以使用liferay的jar包来编译插件,并且完成插件部署。SDKperties文件,该文件有缺省配置信息,你可以使用该build.[username].properties与perties在同一文件夹下,这里的liferayportalbundletomcatc:/lfera-‐prt--62下,你会选定下列行类型的,并且你的bundleSDK文件目录结构在plugins SDK的每个文件夹里都包含生成一种类型插件的脚本,这里是它的ifera-pluns-‐<verson>/--‐PlgnsSDK根目Cnt/-‐‐客户端应用目Dist/-‐‐打包的插件,用于分发和部署x/-ext插件目录2app.server.type=[pertiesusesforyourapplicationservertype]app.server.parent.dir=[thedirectorycontainingyourLiferaybundle]app.server.tomcat.dir=[thedirectorycontainingyourapplicationHooks-‐插件目录Hooks-‐插件目录Portts-‐pot插件目录b/-‐插件目录Bil.reis‐‐默认SDK属性ui--ol-‐‐通用B--‐comn-‐pgixml-‐‐plugin类型引用的属性targetsi--mn-‐lginxl-‐‐plugintargetsrwiki页面。r-‐avadoc--文档格式,可以参考如下地址的页面:liferaysdkportlets./create.shea--heold-‐prt“elearn007windowcreate.bateler--hel--‐prt“elearn007成一个新的目录,在这个目录下,你就可以实现你自己的应用功能。这里SDKLIFERAY6.2开发平台2ant当出现buildsuccessful消息就表明portlet现在已经部署完成,如果liferay服务器打印出1portletant当出现buildsuccessful消息就表明portlet现在已经部署完成,如果liferay服务器打印出1portletforarn007-‐erl--‐pottisavailableforuse就好的应用经验用独立的pluginsSDK.例如你有个局域网,你可以让局域网内的portlets和下themes在它们自己的pluginsSDK项目。的SDK项目。IDEantJAVA项2-3节Maven开发使用MavenRepositories理框架,这里是Maven好的特性:2[LIFERAY6.2开发平台Maven核心的安装是轻量级的,有核心的插件来进行编译,生成分发包,另外还有一组非核心插件,让你具备对maven扩展的能力。许多开发者从antmavenmaven提供了一个通用的项目Maven核心的安装是轻量级的,有核心的插件来进行编译,生成分发包,另外还有一组非核心插件,让你具备对maven扩展的能力。许多开发者从antmavenmaven提供了一个通用的项目Maven使用一个项目对象模型来描述一个软件项目projectobjectmodel(POM),该POM被命名为pom.xml你可以认为pom.xml是你整个依赖关系。该POMpom.xml文件,激活项目建立过程,Maven可以做其余的工作,例如下载你项目里指定POMmavenantMavenantmavenartifactsmavenMavenJAVAJAVAmavenLIFERAY6.2开发平台2Maven的优缺点,以决定你管理自己项目的思路,下面是Maven更深度的参考资料:.Liferay提供了mavenMaven的优缺点,以决定你管理自己项目的思路,下面是Maven更深度的参考资料:.Liferay提供了maven其他更多类型的插件。你可以安装和部署你的你可以到/download.cgi,我们建议你方你的Maven的资源Maven允许你安装你的组件到你的本地资源库,同时也允许你部署你的组件到3[LIFERAY6.2开发平台maven管理Maven资maven管理Maven资源liferayGUI来管理你的资源库,为了完成上面的工作,你需要NexusOSS.Maven资源库管理服务器,可以生成和管理生产服务器,快照服务器性和特新功能的运行;快照服务器则是在某种开发阶段的服务器。如果你对NexusOSS不感冒,可以跳过本小节。打开你的WEB浏览器,访 Nexus资源库服务器(例如http://localhost:8081/nexus),并且登陆,adminLIFERAY6.2开发平台3RepositoriesandNavigatetod-RepositoriesandNavigatetod->tRepositoryID:liferay-RepositoryName:LiferayReleaseProvider:RepositoryPolicy:••••3[LIFERAY6.2开发平台配置本地MavenMaven配置本地MavenMaven发现并访问到资源库,完成对资源组件liferayCE/EE资源组件,或者你向分享资源组件。如果你想从核心资源库自动下载安装liferayCE资源组件,并且你没分享你组件的想法你不需要在你的Maven环境下配置一个资源库服务器。Maven下配置一个镜像是比较好的应用方案,获取更多关于镜像配为了配置你的maven环境,以访问你的liferay-releases打开你的settings.xml文件,没有,就创建新的。<?xml<id>liferay-<id>liferay-LIFERAY6.2开发平台3liferay现在让我们安装你需要的liferay组件,这些组件帮助你生成liferay安装需要的liferayliferay现在让我们安装你需要的liferay组件,这些组件帮助你生成liferay安装需要的liferayliferaymavenliferayEE还是为zip文件liferayEEliferayCEZIPliferay/projects/lportal/files/Liferay该ZIP文件除了包含artifacts外还包含一个完成安装和部署的脚本文件。liferayceliferayce代码库里得到非发行版的从源码建立CEMavenliferaycemavenartifacts那么从源码建立它们即可,切换到你的本地liferayportalce源代码项目,如果你还没有请访问生成文件在你的本地3[LIFERAY6.2开发平台liferayceGPG,gpg–gen–keygpgkey.pgpkey,liferayceGPG,gpg–gen–keygpgkey.pgpkey,你可以通过运行gpg–list–keys找到你的gpgkeyname.注意:release.[username].properties不是必须的,如果你仅仅计划本地安装你的artifacts而不部署它们。liferayliferayportalWAR文件,ant-fbuild-dist.xmlallzip-portal-ant-fbuild-maven.xmldeploy-ant-fbuild-maven.xmlinstall-artifacts.m2javadoc.jar文件的时候,你的机器可能会出现问maxmemory跳过该过 件,搜<!--<antcalltarget="jar-javadoc"/>--gpg.keyname=[GPGkeyname]gpg.passphrase=[GPGpassphrase]LIFERAY6.2开发平台3[LIFERAY6.2开发平台安装artifacts到一个资源库[LIFERAY6.2开发平台安装artifacts到一个资源库1,liferayartifactszipliferay-portal-mavenartifacts的本 代码项目根目录,例如${user_home}/.m2/repositoryartifacts你需要部署它们到发行版资源库服artifacts到一个资源库1,liferay-releaseliferaymaven2,确保将容纳你liferayartifactssettings.xml文件中被指定为服务器,liferay-portal-maven-[version],如果是你自己建立的,它们将在时间戳格式的目录中在你的liferay–portal资源库目录下。4,build.[username].properties文件,这是一个新的属性文件,为lp.maven.repository.id和lp.maven.repository.url指定属性值,这指向你的资源库ID和URL地址,类似下面的例子:3NexossliferayRepository你第一次使用Maven编译你的liferay插件的时候maven为了可以从liferayMavenrepository访问artifacts,你需要配置maven来搜索它们。首先你需要项目的父pom.xml配置liferay资源库的证书:<id>liferay-<name>Liferay<id>liferay-<url>/nexus/content/groups/liferay-下面,你需要与liferay资源库交互,需要使用特定的命令来访问它例如:mvnarchetype:generateDarchetypeCatalog=https://repositLIFERAY6.2开发平台3从核心资源库安装liferay’s6.2.0-RC5发行版及之前的版本,最新的版本请从liferay自己的资源库下载并安装。Liferay从核心资源库安装liferay’s6.2.0-RC5发行版及之前的版本,最新的版本请从liferay自己的资源库下载并安装。Liferay提供了locatedatmavenliferaymaven自动下载需要的artifacts从核心库,如果在你的本地资源库没有发现资源或你设置的任何其他的集合LerayIDeclipsemavenm2e-liferay插件,这些依赖包就默认被安装了,在开始之前,我们理解下这些插件是如何给我们IDE/Maven支持的。M2e-coreMavenEclipse解决方案和一个抽象的项目配置框架针对适配器。当然为了让liferayMaven项目被识别为灵活的WEB项目,Maven项目也必须被映射到一个web项目。M2e-wtpMavenweb之间,在整合方面只有最后的需要就是确保m2e-core插件可以识别额外的liferay元数据映射需求,以支持liferay自定义目标。MavenEclipse都有它们自己的标准在建立项目生命周期上,都保持各自LiferayIDEliferay周m2e-liferayliferaycyleeclipse建立周期被自你的项目选择Properties->Maven->LifecycleMapping.liferayIDEmaven插件,如果你在安装阶段放弃了安装maven插件,那么现在请点击Help->installnewsoftware在workwith文本框,输入:LiferayIDErepository-如果3[LIFERAY6.2开发平台配置你liferaymaven项目配置你liferaymaven项目mavenliferay包括portlets,theme,hook和layouttemplateplugins。Archetypemaven的项目模板工具,让我们使用它生成liferayportlet项目viexportPATH=$PATH:/new/dir/location1source$HOME/.bash_profile看下如何使用LiferayIDE来生成liferaypluginsLIFERAY6.2开发平台3liferay中会自动显示项目类型,而且需要liferay中会自动显示项目类型,而且需要4,设定artifact的版本和组编号,例如这里我们使用1.0-snapshot5,设定你向让plugin项目使用的活动配置,如果你不记得你的活动配置或是没ID配置你的liferaymaven项目部分介绍。liferayliferay运行时,新的活动id和liferay版本号。针对心的活动配置位置你可以悬在在4[LIFERAY6.2开发平台于运行时的情况下,liferayIDE自动设置需要的属性,并且没有多余的活动于运行时的情况下,liferayIDE自动设置需要的属性,并且没有多余的活动在命令行下maven项目mvnarchetype:generate-LIFERAY6.2开发平台4上可用,因此你必须使用-DarchetypeCatalog=…部分来参考从中心库安装ceArtifacts,来配置maven访问liferay资源库。Archetypearchetype让你选择,你可以通tifactID的方式来过滤archetypes,这个阶段,命令行输出类似下面4[LIFERAY6.2开发平台果你指定了一个指向你nexus的公开资源库,该插件也安装到那里。oy.dir属性。archetype生成的话会自带一个pom和mavenliferay插件,你的插件会使用,请参考使用父插件项目为描述liferay属性的章LIFERAY6.2开发平台4开发平台开发平台通过键入mvnpackage对插件进行打包mvnliferay:deploypom.xml(可以是插件目录也可以是父目录)里添加如下部署配置4<name>LiferaySnapshots署到发行版资源库,那么在pom.xml版本部分就应该是:<version>1.0</version>而不再是<version>1.0-mvn署到发行版资源库,那么在pom.xml版本部分就应该是:<version>1.0</version>而不再是<version>1.0-mvndeployNexus2-4 可以使用maven开发的liferay插件类Mavenplugintypes:portlets,themes,layoutportletliferayportletliferayPlugins你可以在groupIDliferay上乖哦率或者使用groupID/artifactID组合liferay:portlet来进行过滤,以更容易发现liferayportletarchetypescom.liferay.maven.archetypes:liferay-portlet-archetypeLIFERAY6.2开发平台4[LIFERAY6.2开发平台java代码文件,而weba[LIFERAY6.2开发平台java代码文件,而webaMaven项目目录类JavasourceWebPluginsSDK项目docroot/WEB-portlettheme-projectsample-liferaytheme插件项目,只需参考前面相关章节,在插件类型选择上确保选择theme为插件类型。ArchetypethemegroupIDgroupID/artifactID来进行过滤例如:liferayliferay:them目录结构:MavenPluginsSDK4liferay.theme.parent:设置父主题,你可以定义任意WARartifact定liferay.theme.parent:设置父主题,你可以定义任意WARartifact定_unstyled,_styled,classic,或control_panel来使用核心主题。发布theme项目packagewarmavenWAR类型的项目,同时上级主题被下载并复制,而你自定义的部分target目录,它第3portlet应用liferayportlet的项目了,但是我们没有真正的在项目里放置任何的portlet,所以我们计划实现一个业务功能使用liferayliferayplugin生成一个简单的portlet,它允许我们自定义欢迎信息保存到portlet的设置中,然后我们在更方便识别和记忆,最后是portlet的国际化的话题。事实上你可以使用你想用的任何框架来开发你 portlet,包struts,SpringMVC,JSFVaadin.这里我们使用liferayMVCPortletLIFERAY6.2开发平台4织机构管理,页面建立,和内容管理等Ruby,PHP开发的应用仍然可以portletliferayportal上,并且可以很好的运行,这方面的织机构管理,页面建立,和内容管理等Ruby,PHP开发的应用仍然可以portletliferayportal上,并且可以很好的运行,这方面的分析portlet项目开发多Actions的Portlet3-1节生成一个Portlet项目PluginSDKportletsportletportlet起个没有空格的名发这里的portlet.IDE环境下开去il-‐>Ne-->Liferay填写项目名eearn00-‐en--‐pot和展示名elearn007UseDefaultlocationcheckbox保持选择状态,默认情况下,默认位置4[LIFERAY6.2开发平台单击下一步使用终端1linuxMacOS./create.shy-geeig“My windowscreate.batm--geeting“Mybuildsuccessfulantportlets目录下新生portlet项目。在这里你将实现你的功能。注意PuginsSDK自动添加”--”到你的项目名当创建该目录的时PluginsSDKportlet项目,你可portletIDE,在那里管理你的新项目。如果你这jarjarliferay安装目录,否则你会得到编译错误。因为ant脚本自动为你做了上面的工portletb-common.xl文件里的classpath,你plugin.classpathportal.classpathjar文件就是你的项目在pluginsSDK.LIFERAY6.2开发平台4部署项目用的消息,而在终端下,你只需要键入antdeploy.portlet3-2节部署项目用的消息,而在终端下,你只需要键入antdeploy.portlet3-2节分析一个Portlet项目opre-///Lifera--sl portletMVCPortlet框架,该框架轻量级,隐藏了复杂的实portletsMVCPortlet项目使JSPsportletportlet模式都有一个相5[LIFERAY6.2开发平台JAVAdocroE--‐I/rcJAVAdocroE--‐I/rcdocrot/W--INFportlet.xmlliferay规范约定Lifera--‐disxm-‐‐描述了portlet出现在添加菜单的类配置portalAccesscontrollist(PACL)属性,jar包依赖及更多配置项目。ifera-‐prtetxl-‐‐针对S--‐286的优化扩展,例如你可以设置当前应用的客户端文件主要是.jsp,.css和.jsportlet这些文件都应该放置在docroot目录;.jsp文件可以放置在根目录,而.css和.js的部分HTML文档,CSS类的名字空间和元素的ID需要避免冲突与另外的portlets.liferayAPI方法,可以为你生成名字空间,在使用portlet名字空间部分会有更多这方面的介绍。进一步了解elearn007Greeting如果你是portlet开发的新手,该部分将提高你对portlet配置选项的理解PluginsSDK,portletdocro-‐Nretxl,pot--‐ae:包含了portleta:Port--cl:全限定类名处portletportalportletnit--‐paramname/valueportletiri--‐c过期缓冲,- Supports:包含了所支持的e--te并且表明portlet模式所支持的特定portletportlet规范里被定义的,模式供通用的方法来在它们之间切换(portlet添加到页面portlets的通用操作非常有用。最常用的场合是生portlet.portlets都必须支持view模式。Port--info:可以被portlet标题栏和portal的类别描述引用,S--286LIFERAY6.2开发平台5[LIFERAY6.2开发平台了一些资源元素可以用于这些目的:t[LIFERAY6.2开发平台了一些资源元素可以用于这些目的:ttlt-epot--直接包含资源元素,或者把它们放到资源包里。你可以在portlet.xmlpo--n片段来指定信息,这是最简单的方法,例如另外你可以指定相同的信息为资源在资源包文件里,例如你可以生成docroE--docroE--‐IN/ccotentlanguage_pertieslanguage_perties.5#DefaultResourceBundle#filename:#PortletInforesourcebundleexamplejavax.portlet.title=WeatherPortlet<title>Weather如果你正转化为maven格式的项目,要确保把content的目录拷贝到src/maiea/如果你正转化为maven格式的项目,要确保把content的目录拷贝到src/maiea/eb--inf/classes目录ecuity--ro--‐ref:rol--‐eDcroot/WE--‐I/lifeay--:除了标准的portlet.xml设置属性之外,liferay规范提升了安装到liferayportal服务器上JAVA标准的portlets,默认情况下PluginsSDk会设置如下的配置信息:Port--‐ae:portletportlet.xml里的设置一3-3 编写入门级MyGreeting个回退到view.jsp的超级链接。单独的JAVA类。首先我们不希望在同样的页面上出现多个欢迎信息,因此让我们让我们的elearn007greeting为非实例化。因此只需要编辑fa--‐rtetxl文件即可,instanceablefalse即可,如果LIFERAY6.2开发平台5[LIFERAY6.2开发平台jspview.jspdocroot目录下,用下面的内容替换它:[LIFERAY6.2开发平台jspview.jspdocroot目录下,用下面的内容替换它:5<%@tagliburi="/portlet_2_0"prefix="portlet"%><%@tagliburi="/tld/aui"prefix="aui"<%@pageimport="javax.portlet.PortletPreferences"<portlet:defineObjectsPortletPreferencesprefs=renderRequest.getPreferences();Stringgreeting=renderRequest.getParameter("greeting");if(greeting!=null){<%@tagliburi="/portlet_2_0"prefix="portlet"%><%@pageimport="javax.portlet.PortletPreferences"PortletPreferencesprefs=renderRequest.getPreferences();Stringgreeting=(String)prefs.getValue("greeting","Hello!Welcometoour<p><%=greeting<portlet:renderURL<portlet:paramname="mvcPath"value="/edit.jsp"<p><ahref="<%=editGreetingURL%>">EditportletIDE或者命令行下:portletIDE或者命令行下:ant这里有不少重要的细节需要注意,首先在超链接生成部分,使用了<portlet:renderURL>/portlet_2_0标签库中jsprequest请求。一定注意,要用标签库来生成链接,因为portlet并没有拥有整个WEB页面,相反仅仅是一部分页面。edit.jspauiAlloyUIHTML或是其prefs.setValue("greeting",greeting);<p>Greetingsaved}greeting="greeting","Hello!Welcometoour<portlet:renderURL<portlet:paramname="mvcPath"value="/edit.jsp"<aui:formaction="<%=editGreetingURL%>"<aui:inputlabel="greeting"name="greeting"type="text"greeting%>"<aui:buttontype="submit"<portlet:renderURL<portlet:paramname="mvcPath"value="/view.jsp"<p><ahref="<%=viewGreetingURL%>">←LIFERAY6.2开发平台5jsp标签库你也会注意到<portlet:defineObjects/>JSP里插入一组隐含的变量,这些变量对开发很重要,包括:renderRequest,portletConfig,portletPreferences,S--8方案定义了四个生命周期方法:processAction,processEvent,render,serveResource.jsp标签库你也会注意到<portlet:defineObjects/>JSP里插入一组隐含的变量,这些变量对开发很重要,包括:renderRequest,portletConfig,portletPreferences,S--8方案定义了四个生命周期方法:processAction,processEvent,render,serveResource.JSPportletJSP可用net-‐‐portletrender请求阶seRqes‐‐代表资源,在JSP处在资源服务阶段可用。-‐‐action的portlet上,vtet‐‐事件请求对esouceespnsrPrMap<String,Object>portletSessionScope:Poretefeee-‐‐表示portlet的偏好设置portletPreferencesValue:3-4 理解Portlet两段式执portlet或者Ruby,下面让我们讨论两阶段的好处:我们的portlet没有拥有整个HTMLportletportlet的处理方法,则页面上的所有portlet都会重新绘制,但是portalportlet都重复上次的更新,行结算,完成了该操作后,portalportlet按照它的缺省视5[LIFERAY6.2开发平台接下来,用户会点击在检索portlet中的商品链接,这会初始化一个request/responseportlet的内容更新。但是在这个新的循环周期中,以前的购物参数都还保存着,因为portal必须显示购物portlet的内容,它需要重复上次的处理,而这会引起新的支付操作,并接下来,用户会点击在检索portlet中的商品链接,这会初始化一个request/responseportlet的内容更新。但是在这个新的循环周期中,以前的购物参数都还保存着,因为portal必须显示购物portlet的内容,它需要重复上次的处理,而这会引起新的支付操作,并为什么会发生这样的冲突,因为portal在运行时无法知道用户添加了哪个URLURL页面portlet到一个页面,portal必须从一个再绘制portlet分离出处理过程。portlet的上次操作是否是一次后台处理。它没有其他选择,除了重复上次操作来得到portlet内容。后台处理阶段:该阶段只能被portlet唤醒一次,是用户与portlet交互的结果,该阶段,portlet可以修改它的状态,例如可以更改用户的偏好设置,醒,但是唤醒的次序在标准portal规范中并没有做出明确的规定,liferayportal对此做了完善,通过y-‐‐rtxmlrenwgt属性。packageimportimportjavax.portlet.ActionRequest;importjavax.portlet.ActionResponse;importjavax.portlet.PortletException;importjavax.portlet.PortletPreferences;importpublicclassMyGreetingPortletextends{publicvoidLIFERAY6.2开发平台5[LIFERAY6.2开发平台[LIFERAY6.2开发平台理阶段,有三种URL,可以通过如下的方式生成:5<%@tagliburi="/portlet_2_0"prefix="portlet"%><%@tagliburi="/tld/aui"prefix="aui"<%@pageimport="com.liferay.portal.kernel.util.ParamUtil"<%@pageimport="com.liferay.portal.kernel.util.Validator"<%@pageimport="javax.portlet.PortletPreferences"<display-name>MyGreeting</display-ActionRequestactionRequest,ActionResponsethrowsIOException,{PortletPreferencesprefs=Stringgreeting=if(greeting!={prefs.setValue("greeting",greeting);prefs.store();}cessAction(actionRequest,}}3-3-5节在Action阶段和Render阶段传送信息有两种方法来从后台处理阶段到展示阶段传递消息。第一种方法是通过renderprocessActionsetRenderParamter方法,添加一个新<portlet:defineObjectsPortletPreferencesprefs=renderRequest.getPreferences();Stringgreeting=(String)prefs.getValue("greeting","Hello!Welcometoour<portlet:actionURL<portlet:paramname="mvcPath"value="/edit.jsp"<aui:formaction="<%=editGreetingURL%>"<aui:inputlabel="greeting"name="greeting"type="text"greeting%>"<aui:buttontype="submit"<portlet:renderURL<portlet:paramname="mvcPath"value="/view.jsp"<p><ahref="<%=viewGreetingURL%>">←LIFERAY6.2开发平台5[LIFERAY6.2开发平台URLURL上的参数从活动阶段仅[LIFERAY6.2开发平台URLURL上的参数从活动阶段仅actionRequestsetRenderParameterrenderini--‐pamURL,那么绘制参数也同时被设置了,所以当我们保存后的成功消息会一直显示,直到我们的portlet的调portlets,session的应用,你的actionRequestJSP中获取,liferay提供了帮助类和标签来完成这样的操作,在processAction方法,你需要使用SessionMessages类。6publicclassMyGreetingPortletextends{publicvoidActionRequestactionRequest,ActionResponsethrowsIOException,{PortletPreferencesprefs=Stringgreeting=if(greeting!={prefs.setValue("greeting",greeting);}<iit-->我们添加我们添加portlet,你回到编辑界面,编辑并保存欢迎信息,etry<liferay-ui:errorkey="error"message="Sorry,anerrorpreventedsavingyourgreeting"<%@tagliburi="/portlet_2_0"prefix="portlet"%><%@tagliburi="/tld/ui"prefix="liferay-ui"<%@pageimport="javax.portlet.PortletPreferences"<portlet:defineObjects<liferay-ui:successkey="success"message="Greetingsaved<%PortletPreferencesprefs=greeting="greeting","Hello!Welcometoourportal.");<p><%=greeting<portlet:renderURL<portlet:paramname="mvcPath"value="/edit.jsp"<p><ahref="<%=editGreetingURL%>">Edit}}LIFERAY6.2开发平台6[LIFERAY6.2开发平台Portlet名字空间名字空间可以确保给定的portlet名字在发回portal的请求参数保持唯一性。[LIFERAY6.2开发平台Portlet名字空间名字空间可以确保给定的portlet名字在发回portal的请求参数保持唯一性。用<portlet:namespace/>标签就可以为你的portlet产生一个唯一的数值。ABportlet.fm的表单。如果没有名字分别就可以用_Afm和_Bfm来进行区分了。默认下,liferayportlets,portlets发送了没名字空间的参数,因此liferay让你可以选择是否关闭无名字空间的参通过在fea--‐rtetxl文件,输入:除此你还需要设置reqr-‐naesaed--‐araetr>false针对第三方3-6节开发Action阶段renderURLmvcPath参数来指你可以按你所需拥有多个活动处理,实现它们的方法,都接收两个参数:6submitForm(document.<portlet:namespace}catch(Exception{SessionErrors.add(actionRequest,}ActionRequestActionResponse.方法名可以自定义,但是方法的名字必须与JSP页面上URL的名字一样。ActionRequestActionResponse.方法名可以自定义,但是方法的名字必须与JSP页面上URL的名字一样。edit.jspactionURL,<portlet:paramname="mvcPath"value="/edit.jsp"publicclassMyGreetingPortletextends{publicvoidActionRequestactionRequest,ActionResponsethrowsIOException,{PortletPreferencesprefs=Stringgreeting=if(greeting!={try}catch(Exception{SessionErrors.add(actionRequest,}}}publicvoidActionRequestactionRequest,ActionResponsethrowsIOException,PortletException//Addcodeheretosendan}}LIFERAY6.2开发平台6[LIFERAY6.2开发平台现在你知道了portlet开发的基础知识,你可以使用你的JAVA技术来开发3-[LIFERAY6.2开发平台现在你知道了portlet开发的基础知识,你可以使用你的JAVA技术来开发3-7 实用友好型portletURL地址URLURL从liferay6开始,我们可以改变哪些复杂的URL地址成为简洁容易记忆的URL地它会去掉不需要的参数从URL上,为了添加该特性,首先需要编辑iea--文件,并且添加如下行在</icon>和<instanceable>之间下面,生成文件(移除换行标记6<?xml3-8节Portlet国际化如果你的目标是生成国际化的portlet,你需要生成语言属性文件,也被成为资3-8节Portlet国际化如果你的目标是生成国际化的portlet,你需要生成语言属性文件,也被成为资portal内建的已经被翻译过的消息都可以被portlet项目访问到。portletportal的内建消息列表中?你的plugin是否包含多个portlet?portletsportlet生成独立的消portletsliferay的语言建立能力从liferayIDE或是pluginsSDK.liferay的语言关管理语言关键字的文件是perties,你可以在pot--im.r的contentprta-imsrc/cnetliferay的你可以使用<iea-‐i:eage标签来使用一个语言关键perties的关键字,例如你想用他们的语言来欢迎用户,可以指定welcome关键字:<liferay-ui:messagekey="welcome"<liferay-ui:messagekey="message-key"LIFERAY6.2开发平台6[LIFERAY6.2开发平台[LIFERAY6.2开发平台库在你的JSP文件里:<liea-‐i:eage/>标签也支持字符串参数传送到一个语言关键字,例如om--‐x关键字会接收一个参数,这里是om--‐x关键字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 凝心聚力再创佳绩:2026年Q2部门工作总结暨Q3规划
- 气候变暖对疫苗接种策略的影响及调整
- 采购电子合同
- 2025~2026学年陕西西安市新城区第一学期期末检测七年级英语
- 2025~2026学年湖北武汉市江汉区上学期九年级英语期末元调试卷
- 2025~2026学年江苏南京市鼓楼区八年级上学期英语练习卷(一)
- 2026江西入团考试题及答案
- 2026会计法考试题及答案
- 2026护士医院考试题及答案
- 2026西北政法大学专职辅导员招聘7人备考题库附答案详解(达标题)
- T-GEIA 11-2021 配用电系统节电装置节电量测量和验证技术导则
- 五年级下册道德与法治课件第三单元《百年追梦复兴中华》单元梳理部编版
- 掺混合材料的硅酸盐水泥
- 鄂托克前旗新寨子砖厂浓盐水处理项目环评报告书
- 新能源汽车动力电池管理及维护技术教案:任务3-3 DCDC转换器的拆装与检测
- TCHSA 010-2023 恒牙拔牙术临床操作规范
- 2023年江苏省连云港市中考英语试卷【含答案】
- 2019人教版新教材高中化学选择性必修三全册重点知识点归纳总结(复习必背)
- dd5e人物卡可填充格式角色卡夜版
- 考生报名承诺书
- DB51T 2880-2022建设放心舒心消费城市通用要求
评论
0/150
提交评论