LIFERAY5架构及开发培训

上传人:m**** 文档编号:570126419 上传时间:2024-08-02 格式:PPT 页数:49 大小:2.62MB
返回 下载 相关 举报
LIFERAY5架构及开发培训_第1页
第1页 / 共49页
LIFERAY5架构及开发培训_第2页
第2页 / 共49页
LIFERAY5架构及开发培训_第3页
第3页 / 共49页
LIFERAY5架构及开发培训_第4页
第4页 / 共49页
LIFERAY5架构及开发培训_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《LIFERAY5架构及开发培训》由会员分享,可在线阅读,更多相关《LIFERAY5架构及开发培训(49页珍藏版)》请在金锄头文库上搜索。

1、ContentsLiferay介绍JSP Portlet开发Struts Portlet开发Configuration Portlet开发SSH Portlet开发开发实践Liferay介绍介绍Liferay概述及特点什么是Portal?PortletvsServlet开发Portlet的生命周期LiferayPortal工作原理规范和标准推荐开发使用工具简单开发说明返回上级目录返回上级目录返回目录返回目录Liferay概述及特点概述及特点vLiferay是专门为符合PortletAPI(JSR268)的门户单元设计开发的。而且有许多不错的门户单元附加在Lliferay中,包括邮件、文档库、日

2、历、公告板等,它们也可以作为开发学习时的例子使用。vLiferayPortal代表了完整的J2EE应用,使用了Web、EJB以及JMS等技术,特别是其前台界面部分使用Struts框架技术,基于XML的portlet配置文件可以自由地动态扩展,使用了WebServices来支持一些远程信息的获取,使用ApahceLucene实现全文检索功能。主要特点:1、提供单一登陆接口,多认证模式(LDAP或SQL);2、管理员能通过用户界面轻松管理用户,组,角色;3、用户能可以根据需要定制个性化的portallayout;4、能够在主流的J2EE应用服务器上运行,如JBoss+Jetty/Tomcat,JO

3、nAS;5、支持主流的数据库,如PostgreSQL,MySQL;6、使用了第三放的开源项目,如Spring,Hibernate,Lucene,Struts;7、支持包括中文在内的多种语言;8、采用最先进的技术Java,EJB,JMS,SOAP,XML;什么是什么是Portal?许斌Portal是基于Web的,以“应用整合”和“消除信息孤岛”为最终目的,提供单点登录、内容聚合、个性化门户定制等功能的综合信息系统。完整的Portal通常由Portal服务器、Portlet容器、Portlet构成。1Portal服务器是容纳Portlet容器,支持Portlet呈现的普通或者特殊Web服务器。Po

4、rtal服务器通常会提供个性化设置、单点登录、内容聚合、信息发布、权限管理等功能,支持各种信息数据来源,并将这些数据信息放在网页中组合而成,提供个性化的内容定制,不同权限的浏览者能够浏览不同的信息内容。2Portlet容器提供Portlet执行的环境,包含很多Portlet并管理它们的生命周期,保存Portlet的定制信息。Portlet容器是普通WebServlet容器的扩展,接收到来自Portal的请求后,接着将这个请求传递给存在Portal容器的Portlet执行。3Portlet是Portal中最重要的组件,负责在Portal中呈现信息内容,有相应的生命周期。通过自定义Portlet,

5、用户很容易定义个性化的Portal页面。Portlet是以Java技术为技术的Web组件,由Portlet容器负责管理、处理请求并返回动态页面,可以作为Portal的可即插即用的界面组件。返回目录Portlet vs Servlet 开发开发开发一个JavaPortlet类似于开发一个基于web应用的Servlet开发相似的地方:vPortlet也是Java技术的web组件vPortlet也是有特定的container在管理vPortlet可以动态产生各种内容vPortlet的生命周期由container所管理vPortlet和客户端的互动是通过request/response的机制主要的区别

6、在于:vPortlet只能生成标记段,不是整个文档,Portal将会连接一些portlets的标记段并且创建一个整个页面返回给用户.v接受请求的类必须继承javax.portlet.Portlet而不是javax.servlet.http.HttpServlet.v一个portlet请求可能涉及两个状态进程:1.对于大多数的请求来说,一个portlet将会执行一个状态转换操作,这与action状态有关系,并且通过一个方法processAction来实现.并不是需要每一个Action状态.包含一个action状态的请求被注入到ActionURL,与此同时那些只含有renderphase的请求被注

7、入到RenderURL.2.接下来所有与页面有关联的,将要被返回的其他的portlets的render状态可能会在任何将HTML标记段来描述他们自身的请求中来被调用.Portlet通过一个render方法实现这种功能.返回目录返回目录Portlet vs Servlet 开发开发Portlet有一些附加的功能是Servlet所没有的:vPortlet能够存取及储存永久配置文件及定制资料。vPortlet可以存取使用者数据vPortlet具有URL的重写功能在文件中去动态建立连结,允许portalserver不用去知道如何在网页的片段之中建立连结及动作。vPortlet可以储存临时性的数据在Po

8、rtletsession之中,拥有两个不同的范围:application-widescope及Portletprivatescope。Portlet不具有一些功能,但是Servlet却有提供:vServlet具有设置输出的文字编码(charactersetencoding)方式vServlet可以设置HTTP输出的headervServlet才能够接收客户对于portal发出的URL请求返回目录返回目录Portlet 的生命周期的生命周期一个Portlet有着良好的生命周期管理,定义了怎样装载,实例化和初始化,怎样响应来自客户端的请求及怎样送出服务。这个Portlet生命周期由Portlet接

9、口的init,processAction,render和destroy方法来表达。载入和实例化载入和实例化:Portlet容器负责载入和实例化Portlet。当Portlet容器运行Portlet应用或者延迟到Portlet需要服务使用者的请求时,Portlet就会被载入并实例化。载入Portlet类后,Portlet类随即被实例化。初始化初始化:Portlet类实例化后,Portlet容器还需要初始化Portlet。以调用Portlet去响应客户端的请求。Portlet容器呼叫Portlet接口中的init方法初始化Portlet。扩展自PortletConfig的类可以取出定义在部署描述文

10、件中的初始化参数,以及ResourceBundle。初始化异常初始化异常:在Portlet初始化期间,Portlet可能会丟出UnavailableException或PortletException异常。此时,Portlet容器不能把Portlet置入已启动的服务,并且Portlet容器必需释放这个Portlet。destory方法不能被呼叫,因为初始化被认为执行失败。发生失败后,Portlet容器会尝试着重新实例化及初始化Portlet。这个异常处理的规则是:由一个UnavailableException指定一个不能执行的最小时间,当此异常发生时,Portlet容器必需等到指定时间过去后才

11、产生并且初始化一个新的Portlet。在初始化过程中所丟出的RuntimeException异常,被当作PortletException来处理。返回目录返回目录Liferay Portal 工作原理(工作原理(1)CompanyLPortal系统根据需要由一个或者多个Portal页面组成,每个Portal页面包含零个或者多个的Portlet。每个Portlet呈现自己的信息内容,以此实现内容聚合。通过定义每个Portlet的可用权限,实现个性化的桌面信息定制。每个Portlet对外表现为一个小窗口,有自己的默认样式和窗口状态。JSR168规范定义了三个Portlet模式:浏览、编辑和帮助。如右

12、图,Portlet有自己的标题,浏览状态下支持编辑、关闭、上移、下移、最大化、最小化功能,编辑状态下支持返回和关闭功能。从各种数据来源提取的信息以Portlet内容的形式呈现在Portal中。同时Portal是可以根据使用者的角色,来决定是要提供(显示)哪几个Portlet模式给使用者操作。返回目录返回目录Liferay Portal 工作原理(工作原理(2)CompanyLPortal页面创建过程如下:Portlet在Portlet容器内执行Portlet容器将这些内容提交给Portlet服务器,Portlet服务器依照这些内容建立Portal页面,然后将它传给客户端呈现。具体流程如右上图:

13、Portal页面的请求过程如下:使用者经由客户端设备(例如浏览器)存取Portal,Portal根据接收到的请求决定哪些Portlet需要被执行以满足需求。Portal通过Portlet容器呼叫Portlet,然后由Portlet产生的片段建立Portal页面,再传回客户端呈现给使用者。具体流程如右下图:Portlet开发完毕后,部署到Portal服务器,由Portal服务器负责组织、权限控制现。返回目录返回目录Java Portlet 规范规范(JSR-268)和和WSRPJSR-268:由于Liferay支持Portlet规范(JSR-268).任何基于此规范的Portlet均可正常运行.

14、Java平台提供了一种基于JSR-168的标准,标准化portlets如何与其他portlet容器集成并在不同的portal产品之间来保证兼容性.LiferayPortal提供了一种100%便利的portlet容器来保证任何基于标准规范的portlet将会在Liferay中运行在JSR-268规范中,一个portlet应用可以聚集其他的不同的portlets并且打包成一个WAR文件,就像一个标准的Javaweb应用一样.在WAR文件中,以portlet.xml来定义portlets的应用,portlet.xml文件放在WAR文件中的WEB-INF目录中.JavaPortlet规范包括portl

15、et容器.WSRP:WSRP是OASISWebServiceforRemotePortlet的缩写。WSRP是WebService的一种新的商业应用,一种新的标准,主要用来简化Portal对于各种资源或者程序整合的复杂度,可以避免编程带来的整合麻烦和问题。而且Portal管理员可以从海量的WSRP服务中选择需要的功能用以整合到目前所用的Portal中。它有三种角色:生产者提供Portlet消费者使用Portlet终端用户最终用户它的特点在于生产者将消费者所需要的信息通过WSRP返回给消费者,这些信息是相对标记片断,例如HTML、XHTML等,可以直接嵌入用户的页面中,而不用像WebServic

16、e一样开发用户端接口。实现这个规范,Portal可以跟各式各样的数据源打交道,彻底终结信息孤岛的窘境。返回目录Liferay Portlet5.2.2开发推荐使用工具开发推荐使用工具JDK1.5,或者1.5-java开发工具包Jre1.5,或者1.6-java程序运行环境Jikes1.22-Jikes是一个IBM创建的Java编译器,比SunJDK的编译器要快.Ant1.7-一个基于Java的生成工具。Subversion-一个简单的版本控制工具,推荐你将所有的代码和配置文件放在一个版本控制工具中,Subversion是一个免费的开源的版本控制工具。Eclipse3.3+MyEclipse6.

17、0-一个支持J2EE,Java,Web,portlet等开发的IDEMySQL5.0-一个主流的开源数据库Tomcat-5.5-Web服务器具体环境变量里面需要的配置有:JAVA_HOMED:ProgramFilesJavajdk1.5.0_16CLASSPATH.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;%JAVA_HOME%jrelibJIKES_HOME,ANT_HOMEPath:%JAVA_HOME%bin;%JIKES_HOME%bin;%ANT_HOME%bin;返回目录Liferay Portlet5.2.2开发简单说明开发简单说

18、明无论是portal和ext工程,目录都很繁杂,其实我们只要关注3个目录就够了。这就是ext工程对应目录:ext-implsrcext-servicesrcportal-web而portal工程项目里面的3个目录:portal-implsrc和portal-servicesrc是portal工程已经实现的所有portlet的java代码和部分资源文件;portal-web目录是放置网页文件和portal的配置文件。ext工程对应目录ext-implsrc,ext-servicesrc和portal-web跟portal是很类似的。ext-implsrc,ext-servicesrc是放置我们自

19、己开发的portlet的java代码。ext-web是自己开发portlet对应的网页文件和配置文件。返回目录Portlets开发介绍流程开发介绍流程SSHPortletSpring+Struts+Hibernate框架的实际应用StrutsPortlet:Struts实现了MVCStruts在struts-config.xml中提供了集中的页面流管理.这使得它高度可升级并且使得你模块化代码流程.JSPPortlet是开发中使用频率最高的开发方式JSPStrutsSSH ConfigurationPortlet的开发流程采用的也是StrutsPortlet的开发流程Configuration简

20、单复杂JSP Portlet开发开发开发JSPPortlet流程创建JSPPortlet流程事项定义portlet配置portletJSP开发发布、运行、测试JSP Portlet开发流程开发流程JSPPortlet是开发中使用频率最高的开发方式,主要原因有两个:(1)当配置好Portlet之后,只需要修改JSP文件。而JSP文件支持hotdeploy,这就会在开发过程中节省好多等待antdeploy和liferaytomcatstartup的时间。(2)开发流程也相对简单。推荐的JSPPortlet推荐开发流程如右图,当然也不用完全按照如下流程来做,只要完成相关配置的修改即可。在在Lifer

21、ay中创建一个中创建一个JSP Portlet:开发流程:1.定义portletportlet-ext.xml定义Portletliferay-portlet-ext.xml配置Portlet实例属性2.国际化配置文件Language-ext.properties3.归类PortletLiferay-display.xml分类组织Portlet4.创建JSPview.jsp定义我们需要的页面开发目录结构:配置文件放在这个目录下:extext-webdocrootWEB-INFJSPs将会放在这个目录下:extext-webdocroothtmlportletextLiferay如何决定哪个JS

22、P应该被首先显示?对于JSPPortlet,JSP直接指向了从portlet-ext.xml中定义的页面.定义定义portletMy_JSP_PortletJSPPortletcom.liferay.util.bridges.jsp.JSPPortletview-jsp/html/portlet/ext/myjspportlet/view.jsp0text/htmlcom.liferay.portlet.StrutsResourceBundlepower-useruser配置文件是:extext-webdocrootWEB-INFportlet-ext.xml注意:注意:1、Portlets是

23、通过,来唯一定义的。因此,你要确保的唯一性。2、要创建JSPPortlet,属性应该设置为com.liferay.util.bridges.jsp.JSPPortlet。3、中的值“view-jsp”不能修改。4.、中的值-指定哪个JSP应该被首先显示配置配置Portlet实例属性实例属性,分类组织,国际化分类组织,国际化My_JSP_Portlettrue/css/test.css/js/test.js定义Portlet实例属性:配置文件是:extext-webdocrootWEB-INFliferay-portlet-ext.xml分类组织Portlets:配置文件是:extext-web

24、docrootWEB-INFliferay-display.xml注意:注意:这里的元素的值My_JSP_Portlet必须要和portlet-ext.xml中的元素的值一致的。其中的key值(即javax.portlet.title.My_JSP_Portlet),是“javax.portlet.title”+“portlet名字”(即在portlet-ext.xml中添加的portlet的的值)定义Portlet名称:配置文件是:extext-implsrccontentLanguage-ext.propertiesjavax.portlet.title.My_JSP_Portlet=My

25、JSPPortletJSP开发开发-创建创建JSP页面页面创建JSP:在extext-webdocroothtmlportletext目录下创建文件目录myjspportlet在新建的myjspportlet目录下,添加一个文件叫init.jsp,在文件中加入下面内容:现在,再在新建的myjspportlet目录下添加一个文件view.jsp在view.jsp中写下:问题出来了,portal如何得知怎样加载这些特殊的文件?如果你返回观察添加到portlet-ext.xml中的portlet元素,你将会观察到你初始化了一个view-jsp参数,它的值是/ext/myjspportlet/view

26、.jsp。通过指定这个init-param,你将使得portlet加载一个默认的JSP。Hello,itsmyfirstjspportlet!发布、运行和测试发布、运行和测试发布:执行ext项目根目录下的build.xml文件antdeploy,部署这些你做的对你的应用的改变,然后重启tomcat服务器。运行和测试:访问地址:http:/localhost:8080。利用用户名:;密码:test登录进入系统。在选择应用的窗口中选择我们刚刚添加的PortletMyJSPPortlet,如果在页面上会增加一个Portlet(如下图),显示出你刚刚添加的内容,那么部署就成功了。添加应用选中添加Str

27、uts Portlet开发开发开发StrutsPortlet流程StrutsPortlet开发小结定义portlet配置portlet定义页面流和页面布局JSP页面开发发布、运行、测试定义ActionStruts Portlet开发流程开发流程StrutsPortlet推荐的开发流程如下,当然也不用完全按照如下流程来做,只要完成相关配置的修改即可。为什么用为什么用Struts?Struts实现了MVC.虽然有其他框架实现MVC,Struts是最广泛应用和最成熟的技术.什么是MVC?MVC将显示代码从业务逻辑中分离出来.Struts在struts-config.xml中提供了集中的页面流管理.这

28、使得它高度可升级并且使得你模块化代码流程.通过使用struts,你可以使用一些最佳实践,已经集成在框架中.为什么用为什么用tiles?一个页面布局是一个使用包含典型声明的设计.如果有100个JSPs并且头和尾都需要改变,所有的100JSPs都需要改变.用tiles,一个简单的模板可以被用于定义页面布局.只要模板改变,所有页面将会依次改变。在在Liferay中创建一个中创建一个Struts Portlet:开发流程:1.定义portletportlet-ext.xml定义Portletliferay-portlet-ext.xml配置Portlet实例属性2.国际化配置文件(定义Portlet名

29、称)Language-ext.properties3.归类PortletLiferay-display.xml分类组织Portlet4.定义页面流和布局struts-config.xml定义页面流titles-defs.jsp定义页面布局5.定义ActionClass6.创建JSPview.jsp定义我们需要的页面开发目录结构:配置文件放在这个目录下:extext-webdocrootWEB-INFJSPs将会放在这个目录下:extext-webdocroothtmlportletextStruts中Action放在这个目录下:extext-implsrccomportlet注意:Lifera

30、y如何决定哪个JSP应该被首先显示?对于JSPPortlet,JSP直接指向了从portlet-ext.xml中定义的页面.对于Strutsportlets,这一系列过程通过tiles-defs.xml来定义.“struts_action”链接到哪里?链接到struts-config.xml.定义定义portletEXT_4LibraryPortletcom.liferay.portlet.StrutsPortletview-action/ext/library/add_book0text/htmlcom.liferay.portlet.StrutsResourceBundlepower-us

31、eruser配置文件是:extext-webdocrootWEB-INFportlet-ext.xml注意:注意:1、Portlets是通过,来唯一定义的。因此,你要确保的唯一性。2、要创建StrutsPortlet,属性应该设置为com.liferay.portlet.StrutsPortlet。3、中的值“view-action”不能修改。4、中的值-struts_action”链接到struts-config.xml中的path属性值配置配置Portlet实例属性、分类组织,国际化实例属性、分类组织,国际化EXT_4ext/libraryfalse定义Portlet实例属性:配置文件是:

32、extext-webdocrootWEB-INFliferay-portlet-ext.xml分类组织Portlets:配置文件是:extext-webdocrootWEB-INFliferay-display.xml注意:注意:这里的元素的值EXT_4必须要和portlet-ext.xml中的元素的值一致的。其中的key值(即javax.portlet.title.EXT_4),是“javax.portlet.title”+“portlet名字”(即在portlet-ext.xml中添加的portlet的的值)定义Portlet名称:配置文件是:extext-implsrccontentLa

33、nguage-ext.propertiesjavax.portlet.title.EXT_4=Library定义定义Struts页面流、页面流、 tiles页面布局页面布局定义Struts页面流:配置文件是:extext-webdocrootWEB-INFstruts-config.xml定义tiles页面布局:配置文件是:extext-webdocrootWEB-INFtiles-defs.xml注意:注意:这里的path=/ext/library/add_book值就是portlet-ext.xml中对应的view-action的值。这理portlet.ext.library继承portl

34、et。这意味着portlet.ext.library将会使用portlet.jsp作为它的模板。portlet.ext.library.view继承portlet.ext.library。这意味着portlet.ext.library.viewportlet.ext.library也将会使用portlet.jsp作为它的模板注意:注意:这里的name=portlet.ext.library.view值就是struts-config.xml中对应的forward=portlet.ext.library.view的值定义定义Actionpackage com.ext.portlet.library

35、.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.a

36、ction.ActionMapping;import com.liferay.portal.struts.PortletAction;public class AddBookAction extends PortletAction public void processAction(ActionMapping mapping, ActionForm form,PortletConfigconfig,ActionRequestreq,ActionResponseres)throws Exception StringbookTitle=req.getParameter(book_title);if

37、 (null = bookTitle | .equals(bookTitle) setForward(req,portlet.ext.library.error);else setForward(req,portlet.ext.library.success);public ActionForward render(ActionMapping mapping, ActionForm form,PortletConfigconfig,RenderRequestreq,RenderResponseres)throws Exception if (getForward(req) != null &

38、!getForward(req).equals() return mapping.findForward(getForward(req);else return mapping.findForward(portlet.ext.library.view);添加目录:extext-implsrccomextportletlibraryaction,并在目录下建Action文件JSP开发开发-创建创建JSP页面页面在extext-webdocroothtmlportletext目录下创建文件目录liberay在新建的liberay目录下,添加文件init.jsp,view.jsp,success.j

39、sp,error.jspInit.jsp里面写下面代码AddabookentrytotheLibrary:formaction=portlet:actionURLwindowState=method=postname=fmBookTitle:inputname=book_titlesize=20type=textvalue=inputtype=buttonvalue=SubmitonClick=submitForm(document.fm);view.jsp里面写入下面的代码其中,这将会让我们使用在上一步这定义的init.jsp其中实际对应目录是:portalportal-webdocroot

40、htmlcommoninit.jsp。这将会让我们使用Liferay标签库JSP开发开发-创建创建JSP页面页面在liberay目录下面创建文件error.jsp和success.jsp。如果添加书成功,则返回success.jsp页面,显示书名;如果添加书失败,则返回error.jsp,提示添加失败。BookTitle:error.jsp里面写入下面的代码:Itsfailedtoaddabook!success.jsp里面写入下面的代码:发布、运行和测试发布、运行和测试发布:执行ext项目根目录下的build.xml文件antdeploy,部署这些你做的对你的应用的改变,然后重启tomcat

41、服务器。运行和测试:访问地址:http:/localhost:8080。利用用户名:;密码:test登录进入系统。在选择应用的窗口中选择我们刚刚添加的PortletLibrary,如果在页面上会增加一个Portlet(如下图),显示出你刚刚添加的内容,那么部署就成功了。添加应用选中添加Sturts Portlet小结小结高度总览一个URL或Uri通过控制器传送.控制器决定哪个页面应该被显示出来.我们开始页面指向portlet-ext.xml的view-action控制器MainServlet.java详细视图:Liferay如何决定哪个如何决定哪个JSP应该被首先显示应该被首先显示?Sturt

42、s Portlet小结小结对于JSPPortlet,JSP直接指向了从portlet-ext.xml中定义的页面.对于Strutsportlets,这一系列过程通过tiles-defs.xml来定义.Sturts Portlet小结小结Liferay将会检查struts-path来检查是否一个用户有访问这个portlet的权限.注意:当你看到错误(error)信息后:你没有足够的权限来访问这个portlet.那么:1.检查你是否在portlet-ext.xml中有正确的定义用户权限.2.检查来观察是否定义正确.Configuration Portlet开发开发开发ConfigurationPo

43、rtlet流程StrutsPortlet开发小结定义portlet配置portlet定义页面流和页面布局JSP页面开发发布、运行、测试定义ActionSSH Portlet开发开发开发SSHPortlet流程StrutsPortlet开发小结定义portlet配置portlet定义页面流和页面布局JSP页面开发发布、运行、测试定义ActionSSH Portlet开发流程开发流程在在Liferay中创建一个中创建一个SSH Portlet:开发目录结构:配置文件放在这个目录下:extext-webdocrootWEB-INFJSPs将会放在这个目录下:extext-webdocroothtml

44、portletextStruts中Action放在这个目录下:extext-implsrccomportletSrc文件夹名放在这个目录下:extext-implsrccomextportlet例如library模块,就在extext-implsrccomextportlet下建目录libraryService.xml放在这个目录下extext-implsrccomextportletlibrary推荐:一个模块的实体表对应放在各自模块下同一个service.xml中ext-implsrc,ext-servicesrc是放置我们自己开发的portlet的java代码。ext-web是自己开发p

45、ortlet对应的网页文件和配置文件。开发SSH,目地来新建一个自己portlet。这里我们采用portal里面代码规范生成机制。对于持久化层和服务层的类都可以自动产生。在在Liferay中创建一个中创建一个SSH Portlet:开发流程:1.建立业务数据表2.建立service.xml文件3.修改ant文件,增加ant任务在extext-impl根目录下的build-parent.xml文件添加build-service任务4.生成实体类和持久化类执行extext-impl根目录下的build.xml文件build具体的任务,生成hibernate的实体类和持久化类6.在实体类和持久化类,

46、增加自己需要的业务操作7.自定义portlet及配置Portlet属性portlet-ext.xml定义Portletliferay-portlet-ext.xml配置Portlet实例属性8.国际化配置文件Language-ext.properties9.归类PortletLiferay-display.xml分类组织Portlet10.定义页面流和布局struts-config.xml定义页面流titles-defs.jsp定义页面布局11.定义Action12.创建JSP定义我们需要的页面建立业务数据表和代码模板配置文件建立业务数据表和代码模板配置文件首先、建立业务数据表,在数据库里面新

47、建一个表UsersEntry,字段userid,username,password.并往表中插入几个条数据。接下来,建立代码模板配置文件建立service.xml文件:在ext-implsrccomextportlet新建一个目录users,在目录下建立一个service.xml文件,文件内容为:UsersUsersEntry修改修改ant文件,增加文件,增加ant任务,并执行任务,并执行ant任务任务建好service.xml文件后,我们在ext-impl目录下打开build-perent.xml 在.的下面添加任务: 然后在MyEclipse的ant视图里面打开ext-impl目录下的bu

48、ild.xml执行build-service-portlet-user任务。之后,我们会发现在ext-implsrccomextportletusers,和ext-servicesrccomextportletusers下面多了几个目录和文件。这是都是系统自动产生的hibernate的实体类和持久化类。如果我们再细心些也可发现在ext-implsrcMETA-INF目录下配置文件都多些内容。这些都是系统已经自动将对应的实体类、持久化类、工具类等配置为相应的javabean、util、service等。这样做无疑节省了很多时间,而且减少我们人工配置的错误。业务实现编码业务实现编码现在我们要实现一

49、个查询功能,将数据库中表名users中所有记录的username,password查询出来,并显示在前台。(1)打开ext-servicesrccomextportletusersservice下UsersEntryService文件,建立一个名为getAllUsers的抽象方法;public List getAllUsers() throws SystemException;(2)然后在ext-implsrccomextportletusersserviceimplUsersEntryServiceImpl.java中实现上面的接口UsersEntryService.即加上如下方法:publ

50、icListgetAllUsers()throwsSystemExceptionreturnUsersEntryUtil.findAll();(3)同样spring的service层也是通过辅助类作为对外唯一入口,所以在UsersEntryServiceUtil里面增加一个方法getAllUsers作为service层的方法getAllUsers的入口。如下:publicstaticListgetAllUsers()throwsSystemExceptionreturn_service.getAllUsers();需要注意的是service层接口对应具体实现是由工厂类指定。他们捆绑关系可以查看

51、spring配置文件信息。定义定义Action-完成响应客户端请求完成响应客户端请求在srccomextportletusersaction目录下建立一个ViewUserAction.java文件package com.ext.portlet.users.action;import com.ext.portlet.users.model.UsersEntryModel;import com.ext.portlet.users.service.UsersEntryServiceUtil;import com.liferay.portal.struts.PortletAction;import j

52、ava.util.ArrayList;import java.util.List;import javax.portlet.PortletConfig;import javax.portlet.RenderRequest;import javax.portlet.RenderResponse;import javax.portlet.WindowState;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action

53、.ActionMapping;public class ViewUsersAction extends PortletAction public ActionForward render(ActionMapping mapping, ActionForm form,PortletConfig config, RenderRequest req, RenderResponse res)throws Exception if (req.getWindowState().equals(WindowState.NORMAL) return mapping.findForward(portlet.ext

54、.users.view); else List users = UsersEntryServiceUtil.getAllUsers(); List usernames = new ArrayList(); List password = new ArrayList(); for (int i = 0; i users.size(); i+) usernames.add(UsersEntryModel) users.get(i).getUsername();password.add(UsersEntryModel) users.get(i).getPassword(); req.setAttri

55、bute(users, usernames); req.setAttribute(password, password); req.setAttribute(count, + users.size(); return mapping.findForward(portlet.ext.users.view_users);建立自己的建立自己的portlet里面大概功能是如果porlet的窗口状态时普通,则定向到一个叫portlet.ext.myuser.view的目标上。如果窗口状态是最大化,那么就从调用userLocalServiceUtil,从数据库里面获取所有人员信息。Portlet的生成建立

56、自己的portlet。在ext-implsrccomextportletusers下面新建文件UsersPortlet.java:package com.ext.portlet.users;import java.io.IOException;import javax.portlet.PortletException;import javax.portlet.PortletPreferences;import javax.portlet.RenderRequest;import javax.portlet.RenderResponse;import com.liferay.portlet.St

57、rutsPortlet;public class UsersPortlet extends StrutsPortlet public void doView(RenderRequest renderRequest,RenderResponse renderResponse) throws IOException, PortletException PortletPreferences prefs = renderRequest.getPreferences();System.out.println(prefs.getValue(test, );super.doView(renderReques

58、t, renderResponse);该portlet重载了doview方法。如果自己portlet对view和edit有自己特性,那么只要重载doview和doedit就可以了。现在portlet的内容是空的,我们用jsp页面来展示用户名称方式来填充portlet里面内容。创建创建jsp页面页面-来填充来填充portlet里面内容里面内容在ext-webdocroothtmlportletext目录下建立目录users,并在users目录下建立init.jsp文件然后,建立view.jsp文件:a href=portlet:renderURL windowState= /MyUser 该js

59、p内容是显示默认的初始用户名。具体值从初始化配置参数里获取。最后,建立view_users.jspsize : .%for (int i = 0; i UserName: & Password:该jsp页面目的是展示所有从数据库里面取出来的用户名和密码。定义定义Portlet在ext-webdocrootWEB-INF目录下的portlet-ext.xml文件里面添加PortletEXT_UsersUserscom.ext.portlet.users.UsersPortletview-action/ext/users/view_users0text/htmlcom.liferay.portle

60、t.StrutsResourceBundletestpower-useruser注意:必须唯一,不得已有portlet名字冲突。也必须唯一。指向我们的建立portlet类。view-action里面值是指view这个action对应的actionurl。里面参数值是提供给这个portlet使用的参数初始值。这里配置是指portlet里面使用到参数名user的值是jack。如portlet不需要初始值参数,则该项不需要配置。配置配置Portlet实例属性、分类组织,国际化实例属性、分类组织,国际化EXT_Usersext/usersfalse定义Portlet实例属性:配置文件是:extext-

61、webdocrootWEB-INFliferay-portlet-ext.xml分类组织Portlets:配置文件是:extext-webdocrootWEB-INFliferay-display.xml注意:注意:的值必须和portlet-ext.xml文件里面值一致。其中的key值(即javax.portlet.title.EXT_4),是“javax.portlet.title”+“portlet名字”(即在portlet-ext.xml中添加的portlet的的值)国际化配置,定义Portlet名称:配置文件是:extext-implsrccontentLanguage-ext.pro

62、pertiesjavax.portlet.title.EXT_Users=Users定义定义Struts页面流、页面流、 tiles页面布局页面布局定义Struts页面流:配置文件是:extext-webdocrootWEB-INFstruts-config.xml定义tiles页面布局:配置文件是:extext-webdocrootWEB-INFtiles-defs.xml注意:注意:这里的path=/ext/library/add_book值就是portlet-ext.xml中对应的view-action的值。当前台提交一个actionUrl为/ext/users/view_users请求

63、的时候,由ViewUsersAction负责处理这个action操作。后面2个forward指的是在ViewUsersAction定向返回请求目标页面。returnmapping.findForward(portlet.ext.users.view);returnmapping.findForward(portlet.ext.users.view_users);findForward的值为避免与其他findForward值冲突,一般将包名也带上,保证不会重名。这理portlet.ext.users.view_users继承portlet。这意味着portlet.ext.users.view_u

64、sers将会使用portlet.jsp作为它的模板。说明:该name的值即随同struct-config.xml配置信息里面forward参数path值对应的,指向真正的目标页面。注意:注意:这里的name=portlet.ext.users.view_users值就是struts-config.xml中对应的forward的值发布、运行和测试发布、运行和测试发布:执行ext项目根目录下的build.xml文件antdeploy,部署这些你做的对你的应用的改变,然后重启tomcat服务器。运行和测试:访问地址:http:/localhost:8080。利用用户名:;密码:test登录进入系统。在选择应用的窗口中选择我们刚刚添加的PortletUsers,如果在页面上会增加一个Portlet(如下图),显示出你刚刚添加的内容,那么部署就成功了。添加应用LOGO

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号