Liferay6架构及开发培训 -- 正在学习_第1页
Liferay6架构及开发培训 -- 正在学习_第2页
Liferay6架构及开发培训 -- 正在学习_第3页
Liferay6架构及开发培训 -- 正在学习_第4页
Liferay6架构及开发培训 -- 正在学习_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

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

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

5、al 中最重要的组件,负责在Portal 中呈现信息内容,有相应的生命周期。通过自定义Portlet,用户很容易定义个性化的Portal 页面。Portlet是以Java技术为技术的Web组件, 由Portlet 容器负责管理、处理请求并返回动态页面,可以作为Portal 的可即插即用的界面组件。返回目录Portlet vs Servlet 开发开发开发一个Java Portlet 类似于开发一个基于web应用的Servlet开发相似的地方:vPortlet 也是 Java 技术的 web 组件vPortlet 也是有特定的 container 在管理vPortlet 可以动态产生各种内容vP

6、ortlet 的生命周期由 container 所管理vPortlet 和客户端的互动是通过 request/response 的机制主要的区别在于:vPortlet只能生成标记段,不是整个文档, Portal将会连接一些portlets的标记段并且创建一个整个页面返回给用户.v接受请求的类必须继承javax.portlet.Portlet 而不是javax.servlet.http.HttpServlet.v一个portlet请求可能涉及两个状态进程:1. 对于大多数的请求来说,一个portlet将会执行一个状态转换操作,这与action 状态有关系,并且通过一个方法processActio

7、n来实现.并不是需要每一个Action 状态.包含一个action 状态的请求被注入到ActionURL,与此同时那些只含有render phase 的请求被注入到RenderURL.2. 接下来所有与页面有关联的,将要被返回的其他的portlets的render状态可能会在任何将HTML标记段来描述他们自身的请求中来被调用.Portlet通过一个render方法实现这种功能.返回目录返回目录Portlet vs Servlet 开发开发Portlet 有一些附加的功能是 Servlet 所没有的:vPortlet 能够存取及储存永久配置文件及定制资料。vPortlet 可以存取使用者数据vP

8、ortlet 具有 URL 的重写功能在文件中去动态建立连结,允许 portal server 不用去知道如何在网页的片 段之中建立连结及动作。vPortlet 可以储存临时性的数据在 Portlet session 之中,拥有两个不同的范围 :application-wide scope 及 Portlet private scope 。 Portlet 不具有一些功能, 但是 Servlet 却有提供:vServlet 具有设置输出的文字编码( character set encoding)方式vServlet 可以设置 HTTP 输出的 headervServlet 才能够接收客户对于

9、portal 发出的 URL 请求返回目录返回目录Portlet 的生命周期的生命周期 一个Portlet有着良好的生命周期管理,定义了怎样装载,实例化和初始化,怎样响应来自客户端的请求及怎样送出服务。这个Portlet生命周期由Portlet接口的init,processAction,render和destroy方法来表达。载入和实例化载入和实例化:Portlet 容器负责载入和实例化Portlet。当Portlet 容器运行Portlet 应用或者延迟到Portlet 需要服务使用者的请求时,Portlet 就会被载入并实例化。载入Portlet 类后,Portlet 类随即被实例化。初始

10、化初始化:Portlet 类实例化后,Portlet 容器还需要初始化Portlet。以调用Portlet 去响应客户端的请求。Portlet 容器呼叫Portlet 接口中的init 方法初始化Portlet。扩展自PortletConfig的类可以取出定义在部署描述文件中的初始化参数,以及Resource Bundle。初始化异常初始化异常:在 Portlet 初始化期间,Portlet 可能会丟出 UnavailableException 或PortletException 异常。此时,Portlet 容器不能把 Portlet 置入已启动的服务,并且 Portlet容器必需释放这个 P

11、ortlet。 destory 方法不能被呼叫,因为初始化被认为执行失败。发生 失败后,Portlet 容器会尝试着重新实例化及初始化 Portlet。这个异常处理的规则是:由一个UnavailableException 指定一个不能执行的最小时间,当此异常发生时,Portlet 容器必需等到指定时间过去后才产生并且初始化一个新的 Portlet。在初始化过程中所丟出的 Runtime Exception 异常,被当作 PortletException 来处理。返回目录返回目录Liferay Portal 工作原理(工作原理(1)Company L Portal 系统根据需要由一个或者多个Po

12、rtal 页面组成,每个Portal 页面包含零个或者多个的Portlet。每个Portlet 呈现自己的信息内容,以此实现内容聚合。通过定义每个Portlet 的可用权限,实现个性化的桌面信息定制。 每个Portlet 对外表现为一个小窗口,有自己的默认样式和窗口状态。 JSR168 规范定义了三个Portlet 模式: 浏览、编辑和帮助。如右图,Portlet 有自己的标题,浏览状态下支持编辑、关闭、上移、下移、最大化、最小化功能,编辑状态下支持返回和关闭功能。从各种数据来源提取的信息以Portlet 内容的形式呈现在Portal 中。 同时Portal 是可以根据使用者的角色,来决定是要

13、提供(显示)哪几个Portlet 模式给使用者操作。返回目录返回目录Liferay Portal 工作原理(工作原理(2)Company LPortal 页面创建过程如下: Portlet 在 Portlet 容器内执行Portlet容器将这些内容提交给 Portlet 服务器,Portlet 服务器依照这些内容建立Portal页面,然后将它传给客户端呈现。具体流程如右上图:Portal 页面的请求过程如下: 使用者经由客户端设备(例如浏览器)存取 Portal,Portal 根据接收到的请求决定哪些 Portlet 需要被执行以满足需求。Portal 通过Portlet容器呼叫 Portle

14、t,然后由Portlet产生的片段建立Portal页面,再传回客户端呈现给使用者。具体流程如右下图:Portlet 开发完毕后,部署到Portal 服务器,由Portal 服务器负责组织、权限控制现。返回目录返回目录Java Portlet 规范规范(JSR-268)和和WSRPJSR-268:由于Liferay 支持Portlet 规范(JSR-268).任何基于此规范的Portlet均可正常运行.Java 平台提供了一种基于JSR-168的标准,标准化portlets如何与其他portlet 容器集成并在不同的portal 产品之间来保证兼容性. Liferay Portal 提供了一种1

15、00%便利的portlet 容器来保证任何基于标准规范的portlet将会在Liferay中运行在JSR-268规范中,一个portlet应用可以聚集其他的不同的portlets并且打包成一个WAR文件,就像一个标准的Java web应用一样.在WAR文件中,以portlet.xml 来定义portlets 的应用, portlet.xml 文件放在WAR 文件中的WEB-INF目录中. Java Portlet 规范包括portlet 容器.WSRP: WSRP 是OASIS Web Service for Remote Portlet 的缩写。WSRP 是Web Service 的一种新的

16、商业应用,一种新的标准,主要用来简化Portal 对于各种资源或者程序整合的复杂度,可以避免编程带来的整合麻烦和问题。而且Portal 管理员可以从海量的WSRP 服务中选择需要的功能用以整合到目前所用的Portal 中。它有三种角色:生产者 提供Portlet消费者 使用Portlet终端用户 最终用户 它的特点在于生产者将消费者所需要的信息通过WSRP 返回给消费者,这些信息是相对标记片断,例如HTML、XHTML 等,可以直接嵌入用户的页面中,而不用像Web Service一样开发用户端接口。实现这个规范,Portal 可以跟各式各样的数据源打交道,彻底终结信息孤岛的窘境。返回目录Lif

17、eray Portlet5.2.2开发推荐使用工具开发推荐使用工具JDK 1.5,或者 1.5 -java开发工具包Jre1.5,或者1.6 -java程序运行环境Jikes 1.22-Jikes是一个IBM创建的Java编译器,比Sun JDK的编译器要快.Ant 1.7-一个基于 Java 的生成工具。Subversion -一个简单的版本控制工具,推荐你将所有的代码和配置文件放在一个版本控制工具中,Subversion是一个免费的开源的版本控制工具。Eclipse3.3+MyEclipse6.0-一个支持J2EE,Java,Web,portlet等开发的IDEMySQL5.0-一个主流的

18、开源数据库Tomcat-5.5-Web服务器具体环境变量里面需要的配置有:JAVA_HOME D:Program FilesJavajdk1.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开发简单说明开发简单说明无论是portal和ext工程,目录都很繁杂,其实我们只要关

19、注3个目录就够了。这就是ext工程对应目录: ext-implsrc ext-servicesrc portal-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是放置我们自己开发的portlet的java代码。ext-web是自

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

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

22、P Portlet:开发流程:1. 定义portlet portlet-ext.xml 定义Portlet liferay-portlet-ext.xml 配置Portlet实例属性2. 国际化配置文件 Lperties3. 归类Portlet Liferay-display.xml 分类组织Portlet4. 创建JSP view.jsp 定义我们需要的页面开发目录结构:配置文件放在这个目录下: extext-webdocrootWEB-INFJSPs将会放在这个目录下: extext-webdocroothtmlportletextLiferay如何决定哪个J

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

24、lets是通过,来唯一定义的。因此,你要确保的唯一性。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-INF liferay-portlet-ext.xml分类组织Portlets:配置文件是: e

25、xtext-webdocrootWEB-INF liferay-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-implsrccontentLpertiesjavax.portlet.title.My_J

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

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

28、刚添加的内容,那么部署就成功了。添加应用选中添加Struts Portlet开发开发开发Struts Portlet流程Struts Portlet开发小结定义portlet配置portlet定义页面流和页面布局JSP页面开发发布、运行、测试定义ActionStruts Portlet开发流程开发流程StrutsPortlet推荐的开发流程如下,当然也不用完全按照如下流程来做,只要完成相关配置的修改即可。为什么用为什么用Struts? Struts实现了MVC.虽然有其他框架实现MVC,Struts是最广泛应用和最成熟的技术. 什么是MVC?MVC将显示代码从业务逻辑中分离出来. Struts

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

30、t.xml 配置Portlet实例属性2. 国际化配置文件(定义Portlet名称) Lperties3. 归类Portlet Liferay-display.xml 分类组织Portlet4. 定义页面流和布局 struts-config.xml定义页面流 titles-defs.jsp定义页面布局5.定义Action Class6. 创建JSP view.jsp 定义我们需要的页面开发目录结构:配置文件放在这个目录下: extext-webdocrootWEB-INFJSPs将会放在这个目录下: extext-webdocroothtmlportletextS

31、truts中Action放在这个目录下: extext-implsrccomportlet注意:Liferay如何决定哪个JSP应该被首先显示?对于JSP Portlet, JSP直接指向了从portlet-ext.xml中定义的页面.对于Struts portlets,这一系列过程通过tiles-defs.xml来定义.“struts_action”链接到哪里?链接到struts-config.xml.定义定义portletEXT_4Library Portletcom.liferay.portlet.StrutsPortletview-action/ext/library/add_book

32、0text/htmlcom.liferay.portlet.StrutsResourceBundlepower-useruser配置文件是: extext-webdocrootWEB-INFportlet-ext.xml注意:注意:1、Portlets是通过,来唯一定义的。因此,你要确保的唯一性。2、要创建Struts Portlet,属性应该设置为com.liferay.portlet.StrutsPortlet。3、中的值“view-action”不能修改。 4、 中的值- struts_action”链接到struts-config.xml中的path属性值配置配置Portlet实例属性

33、、分类组织,国际化实例属性、分类组织,国际化EXT_4ext/libraryfalse定义Portlet实例属性:配置文件是: extext-webdocrootWEB-INF liferay-portlet-ext.xml分类组织Portlets:配置文件是: extext-webdocrootWEB-INF liferay-display.xml注意:注意:这里的元素的值 EXT_4必须要和portlet-ext.xml中的元素的值一致的。 其中的key值(即javax.portlet.title. EXT_4),是“javax.portlet.title”+“portlet名字”(即在p

34、ortlet-ext.xml中添加的portlet的的值)定义Portlet名称:配置文件是: extext-implsrccontentLpertiesjavax.portlet.title.EXT_4=Library定义定义Struts页面流、页面流、 tiles页面布局页面布局定义Struts页面流:配置文件是: extext-webdocrootWEB-INF struts-config.xml定义tiles页面布局:配置文件是: extext-webdocrootWEB-INF tiles-defs.xml注意:注意:这里的path=/ext/libra

35、ry/add_book值就是portlet-ext.xml中对应的view-action的值。 这理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=portlet.ext.library.view值就是struts-confi

36、g.xml中对应的forward=portlet.ext.library.view的值定义定义Actionpackage 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

37、.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

38、 req, ActionResponse res)throws Exception String bookTitle = req.getParameter(book_title);if (null = bookTitle | .equals(bookTitle) setForward(req, portlet.ext.library.error); else setForward(req, portlet.ext.library.success);public ActionForward render(ActionMapping mapping, ActionForm form,Portlet

39、Config config, RenderRequest req, RenderResponse res)throws Exception if (getForward(req) != null & !getForward(req).equals() return mapping.findForward(getForward(req); else return mapping.findForward(portlet.ext.library.view);添加目录: extext-implsrccomextportletlibraryaction,并在目录下建Action文件JSP开发开发

40、-创建创建JSP页面页面在 extext-web docroothtmlportletext目录下创建文件目录liberay在新建的liberay目录下,添加文件init.jsp,view.jsp,success.jsp,error.jspInit.jsp里面写下面代码Add a book entry to the Library:form action=portlet:actionURL windowState= method=post name=fmBook Title:input name=book_title size=20 type=text value=input type=but

41、ton value=Submit onClick=submitForm(document.fm);view.jsp里面写入下面的代码其中,这将会让我们使用在上一步这定义的init.jsp其中实际对应目录是:portalportal-webdocroothtmlcommoninit.jsp。这将会让我们使用Liferay 标签库JSP开发开发-创建创建JSP页面页面在liberay目录下面创建文件error.jsp和success.jsp。如果添加书成功,则返回success.jsp页面,显示书名;如果添加书失败,则返回error.jsp,提示添加失败。Book Title:error.jsp里

42、面写入下面的代码:Its failed to add a book!success.jsp里面写入下面的代码:发布、运行和测试发布、运行和测试发布:执行ext项目根目录下的build.xml文件ant deploy,部署这些你做的对你的应用的改变,然后重启tomcat服务器。运行和测试:访问地址:http:/localhost:8080。利用用户名:;密码:test登录进入系统。在选择应用的窗口中选择我们刚刚添加的PortletLibrary,如果在页面上会增加一个Portlet(如下图),显示出你刚刚添加的内容,那么部署就成功了。添加应用选中添加Sturts Portlet小结小结高度总览

43、一个URL或Uri通过控制器传送. 控制器决定哪个页面应该被显示出来. 我们开始页面指向portlet-ext.xml的view-action控制器MainServlet.java详细视图:Liferay如何决定哪个如何决定哪个JSP应该被首先显示应该被首先显示?Sturts Portlet小结小结对于JSP Portlet, JSP直接指向了从portlet-ext.xml中定义的页面.对于Struts portlets,这一系列过程通过tiles-defs.xml来定义.Sturts Portlet小结小结 Liferay将会检查struts-path来检查是否一个用户有访问这个portl

44、et的权限.注意:当你看到错误(error)信息后:你没有足够的权限来访问这个portlet.那么: 1. 检查你是否在portlet-ext.xml中有正确的定义用户权限. 2. 检查来观察是否定义正确.Configuration Portlet开发开发开发Configuration Portlet流程Struts Portlet开发小结定义portlet配置portlet定义页面流和页面布局JSP页面开发发布、运行、测试定义ActionSSH Portlet开发开发开发SSH Portlet流程Struts Portlet开发小结定义portlet配置portlet定义页面流和页面布局JS

45、P页面开发发布、运行、测试定义ActionSSH Portlet开发流程开发流程在在Liferay中创建一个中创建一个SSH Portlet:开发目录结构:配置文件放在这个目录下: extext-webdocrootWEB-INFJSPs将会放在这个目录下: extext-webdocroothtmlportletextStruts中Action放在这个目录下: extext-implsrccomportletSrc文件夹名放在这个目录下 : extext-implsrccomextportlet 例如library模块,就在 extext-implsrccomextportlet下建目录li

46、braryService.xml放在这个目录下 extext-implsrccomextportletlibrary 推荐:一个模块的实体表对应放在各自模块下同一个service.xml中ext-implsrc,ext-servicesrc是放置我们自己开发的portlet的java代码。ext-web是自己开发portlet对应的网页文件和配置文件。开发SSH,目地来新建一个自己portlet。这里我们采用portal里面代码规范生成机制。对于持久化层和服务层的类都可以自动产生。在在Liferay中创建一个中创建一个SSH Portlet:开发流程:1.建立业务数据表2.建立service.

47、xml文件3.修改ant文件,增加ant任务 在extext-impl根目录下的build-parent.xml文件添加build-service任务4.生成实体类和持久化类 执行extext-impl根目录下的build.xml文件build 具体的 任务,生成hibernate的实体类和持久化类6.在实体类和持久化类,增加自己需要的业务操作7.自定义portlet及配置Portlet属性 portlet-ext.xml 定义Portlet liferay-portlet-ext.xml 配置Portlet实例属性8. 国际化配置文件 Lperties9. 归类

48、Portlet Liferay-display.xml 分类组织Portlet10. 定义页面流和布局 struts-config.xml定义页面流 titles-defs.jsp定义页面布局11.定义Action12. 创建JSP 定义我们需要的页面建立业务数据表和代码模板配置文件建立业务数据表和代码模板配置文件首先、建立业务数据表,在数据库里面新建一个表UsersEntry,字段userid,username,password.并往表中插入几个条数据。接下来,建立代码模板配置文件建立service.xml文件:在ext-implsrccomextportlet 新建一个目录users,在目

49、录下建立一个service.xml文件,文件内容为:UsersUsersEntry 修改修改ant文件,增加文件,增加ant任务,并执行任务,并执行ant任务任务建好service.xml文件后,我们在ext-impl目录下打开build-perent.xml 在.的下面添加任务: 然后在MyEclipse的ant视图里面打开ext-impl目录下的build.xml执行build-service-portlet-user任务。 之后,我们会发现在ext-implsrccomextportletusers ,和 ext-servicesrccomextportletusers下面多了几个目录和

50、文件。这是都是系统自动产生的hibernate的实体类和持久化类。如果我们再细心些也可发现在ext-implsrcMETA-INF目录下配置文件都多些内容。这些都是系统已经自动将对应的实体类、持久化类、工具类等配置为相应的javabean、util、service等。这样做无疑节省了很多时间,而且减少我们人工配置的错误。业务实现编码业务实现编码现在我们要实现一个查询功能,将数据库中表名users中所有记录的username,password查询出来,并显示在前台。(1)打开ext-servicesrccomextportletusersservice下UsersEntryService文件,建

51、立一个名为getAllUsers的抽象方法;public List getAllUsers() throws SystemException;(2)然后在ext-implsrccomextportletusersserviceimplUsersEntryServiceImpl.java中实现上面的接口UsersEntryService.即加上如下方法:public List getAllUsers() throws SystemException return UsersEntryUtil.findAll();(3)同样spring的service层 也是通过辅助类作为对外唯一入口,所以在Us

52、ersEntryServiceUtil里面增加一个方法getAllUsers作为service层的方法getAllUsers的入口。如下: public static List getAllUsers() throws SystemException return _service.getAllUsers(); 需要注意的是service层接口对应具体实现是由工厂类指定。他们捆绑关系可以查看spring配置文件信息。定义定义Action-完成响应客户端请求完成响应客户端请求在srccomextportletusersaction目录下建立一个ViewUserAction.java文件packa

53、ge 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 java.util.ArrayList;import java.util.List;import javax.portlet.PortletConfig;import javax.portlet.Render

54、Request;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.ActionMapping;public class ViewUsersAction extends PortletAction public ActionForward render(ActionMap

55、ping mapping, ActionForm form,PortletConfig config, RenderRequest req, RenderResponse res)throws Exception if (req.getWindowState().equals(WindowState.NORMAL) return mapping.findForward(portlet.ext.users.view); else List users = UsersEntryServiceUtil.getAllUsers(); List usernames = new ArrayList();

56、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.setAttribute(users, usernames); req.setAttribute(password, password); req.setAttribute(count, + users.size(); r

57、eturn mapping.findForward(portlet.ext.users.view_users); 建立自己的建立自己的portlet里面大概功能是如果porlet的窗口状态时普通,则定向到一个叫portlet.ext.myuser.view的目标上。如果窗口状态是最大化,那么就从调用userLocalServiceUtil,从数据库里面获取所有人员信息。Portlet的生成建立自己的portlet。在ext-implsrccomextportletusers下面新建文件UsersPortlet.java:package com.ext.portlet.users;import

58、java.io.IOException;import javax.portlet.PortletException;import javax.portlet.PortletPreferences;import javax.portlet.RenderRequest;import javax.portlet.RenderResponse;import com.liferay.portlet.StrutsPortlet;public class UsersPortlet extends StrutsPortlet public void doView(RenderRequest renderReq

59、uest,RenderResponse renderResponse) throws IOException, PortletException PortletPreferences prefs = renderRequest.getPreferences();System.out.println(prefs.getValue(test, );super.doView(renderRequest, renderResponse); 该portlet重载了doview方法。如果自己portlet对view和edit有自己特性,那么只要重载doview和doedit就可以了。现在portlet的内容是空的,我们用jsp页面来展示用户名称方式来填充portlet里面内容。 创建创建jsp页面页面-来填充来填充portlet里面内容里面内容在 ext-webdocroothtmlportletext目录下建立目录users,并在users目录下建立init.jsp文件 然后,建立view

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论