Liferay 6.1开发学习(九):Hook开发简介

2012年10月15日 Liferay 评论 3 条 阅读 24,325 views 次

一、Hook是什么

hook是什么在http://www.huqiwen.com/2012/09/01/liferay-6-1-development-study-2-create-portlet-project/里面有一个大概的介绍。Liferay提供hook的目的是减少二次开发的代码与liferay核心工程的耦合,通过hook我们主要可以主要做以下六件事情:

1、覆盖事件处理程序:如程序启动事件(application.startup.events)、登录注销事件(login.events.pre、login.events.post)、session的创建销毁事件等。

2、语言包:比如对liferay的某些翻译不满意,需要自定义,则可以使用hook覆盖liferay的语言包。

3、liferay工程的portlet JSP内容:比如想在顶部的top_bar里面添加内容、想修改liferay的用户编辑界面、想修改用户登录界面等等。

4、覆盖portal.properties里面的属性配置:可以在hook工程里面覆盖一些liferay的portal.properties里面属性配置,但是请注意,在hook工程里面只能覆盖部分的属性设置。不能覆盖的如果需要可以在root/WEB-INF/classes里面添加portal-ext.properties,这个同可以覆盖所有的。

5、覆盖liferay的services里面的方法,如UserLocalService、GroupLocalService、OrganizationLocalService等等。

6、Liferay的Model监听程序,比如user、group、blog等的创建、更新、查看;插件的部署;集群的消息传递等等监听程序。

二、使用Liferay IDE进行hook开发

1、在liferay IDE中,New Liferay Project-->选择hook-->输入project Name,点击完成,即可创建一个hook工程。

2、在IDE的工具条中,选择New Liferay hook,选择我们要创建的hook类型,如下图:

Liferay Hook定义

custom JSp:为自定义的JSP文件

portal properties:覆盖portal属性

Services:这个可以可以做两件事情一是覆盖事件处理程序;二是覆盖service类

Lanuage properties:这个覆盖或者新增国际化的语言文件。

3、以Custom JSPs为例,点击下一步,如下图

创建自定义JSP

尽量的使用 Add from Liferay。这样我们可以在弹出的界面中选择相应的我们要覆盖的JSP路径。点击完成。

4、现在demo-hook工程目录下的docroot/custom_jsps下面将出现我们上面选择的路径的JSP文件,此文件下的JSP路径一定要和Liferay root下的待覆盖的JSP路径相符。现在就可以编辑此JSP来覆盖我们想覆盖的内容,打开此JSP可以看到这里面的内容和portal下面的JSP内容完全一样,修改想修改的部,点击ant的deploy即可发布。

5、对于示例中的top_js.jspf文件,可以做什么呢?top_js.jspf此文件是portal的头部JS的加载程序。比如我要在我的portlet工程里面引用jQuery库,则可以在top_js.jsp里面将jQuery的库引进来,这样在portlet的工程里面不用每个页面都需要引用jQuery,可以避免一个页面中多个portlet引用jQuery引起的冲突。引用方法如下

在top_js.jspf的最后部分添加:

<script type="text/javascript" src="/html/js/jquery-1.8.0.min.js"></script>

同时,在custom_jsps/html下面建立js目录,并将jquery-1.8.0.min.js库复制到此目录下面即可。

6、对于portal.properties的覆盖和语言包的覆盖类似。Services的覆盖略有不同,在下一篇文章里面详述。

用户头像

3 条留言  访客:2 条  博主:0 条   引用: 1 条

  1. 04:29:41,864 ERROR [liferay/scheduler_dispatch-22][PortalLDAPImporterImpl:213] Error importing LDAP users and groups
    javax.naming.CommunicationException: [LDAP: error code 2 – paged results cookie is invalid]; remaining name ‘ou=users,dc=sitc,dc=com’
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3115)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3013)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2820)
    at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1829)
    at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1752)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:368)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:338)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:321)
    at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:248)
    at com.liferay.portal.security.ldap.PortalLDAPUtil.searchLDAP(PortalLDAPUtil.java:760)
    at com.liferay.portal.security.ldap.PortalLDAPUtil.getUsers(PortalLDAPUtil.java:557)
    at com.liferay.portal.security.ldap.PortalLDAPUtil.getUsers(PortalLDAPUtil.java:592)
    at com.liferay.portal.security.ldap.PortalLDAPImporterImpl.importFromLDAPByUser(PortalLDAPImporterImpl.java:691)
    at com.liferay.portal.security.ldap.PortalLDAPImporterImpl.importFromLDAP(PortalLDAPImporterImpl.java:206)
    at com.liferay.portal.security.ldap.PortalLDAPImporterImpl.importFromLDAP(PortalLDAPImporterImpl.java:142)
    at com.liferay.portal.security.ldap.PortalLDAPImporterImpl.importFromLDAP(PortalLDAPImporterImpl.java:101)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.liferay.portal.security.lang.DoPrivilegedHandler.doInvoke(DoPrivilegedHandler.java:88)
    at com.liferay.portal.security.lang.DoPrivilegedHandler.invoke(DoPrivilegedHandler.java:56)
    at $Proxy410.importFromLDAP(Unknown Source)
    at com.liferay.portal.security.ldap.PortalLDAPImporterUtil.importFromLDAP(PortalLDAPImporterUtil.java:39)
    at com.liferay.portlet.admin.messaging.LDAPImportMessageListener.doReceive(LDAPImportMessageListener.java:51)
    at com.liferay.portal.kernel.messaging.BaseMessageListener.receive(BaseMessageListener.java:26)
    at sun.reflect.GeneratedMethodAccessor288.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.liferay.portal.kernel.bean.ClassLoaderBeanHandler.invoke(ClassLoaderBeanHandler.java:67)
    at $Proxy606.receive(Unknown Source)
    at com.liferay.portal.kernel.scheduler.messaging.SchedulerEventMessageListenerWrapper.receive(SchedulerEventMessageListenerWrapper.java:76)
    at com.liferay.portal.kernel.messaging.InvokerMessageListener.receive(InvokerMessageListener.java:72)
    at com.liferay.portal.kernel.messaging.ParallelDestination$1.run(ParallelDestination.java:69)
    at com.liferay.portal.kernel.concurrent.ThreadPoolExecutor$WorkerTask._runTask(ThreadPoolExecutor.java:678)
    at com.liferay.portal.kernel.concurrent.ThreadPoolExecutor$WorkerTask.run(ThreadPoolExecutor.java:589)
    at java.lang.Thread.run(Thread.java:662)

    我使用的 是 liferay 6.1.2 + cas 3.5 + OpenLdap ,在用户 同步,只能同步1000左右的用户之后的就都报这个错不能同步,麻烦给指条明路! 非常感谢!

来自外部的引用: 1 条

  • Liferay 6开发学习(二十四):Liferay开发模式介绍 | IT人生录

给我留言

您必须 登录 才能发表留言!

Copyright © IT人生录 保留所有权利.   主题设计 知更鸟 滇ICP备16001547号

用户登录

分享到: