2014-01-19 57 views
3

我在liferay中开发了一个portlet我有一个表(实体),当portlet部署时我想用数据填充它。 如何在部署操作中调用类的方法?如何定义在Liferay portlet中部署的操作?

+0

看到http://stackoverflow.com/questions/10353881/overriding-liferay-startup-events/10356947 – Mark

回答

4

最后我解决了它。

我必须在src文件夹的某处创建我的动作类。

package com.example.portal.events; 

import java.util.Arrays; 

import com.liferay.portal.kernel.events.SimpleAction; 

public class ExampleStartupAction extends SimpleAction { 

    public void run(String[] ids) { 

    System.out.println("############################ This is a Startup Action ##########################"+ ids.length+" "+Arrays.toString(ids)); 

    } 

} 

然后,你必须在WEB-INF创建src文件夹内的一个名为portal.properties一个文件,并添加这一行吧:

application.startup.events=com.example.portal.events.ExampleStartupAction 

最后,你必须编辑的Liferay-hook.xml文件在上面添加以下行:

<portal-properties>portal.properties</portal-properties> 

方法运行,将在deplet的portlet期间运行。

1

您也可以重写并使用portlet类的init()方法。

-1

通过使用servlet上下文初始值设定项,您可以在上下文初始化和销毁​​期间执行操作。 在web.xml中添加这个..

<?xml version="1.0" encoding="iso-8859-1"?> 
<!DOCTYPE web-app 
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 


    <listener> 
     <listener-class>MyListenerClass</listener-class> 
    </listener> 

</web-app> 

与实现监听器类

import javax.servlet.*; 
    import javax.servlet.http.*; 

    public class MyListenerClass implements ServletContextListener { 

     public void contextInitialized(ServletContextEvent e) { 
... 
} 

public void contextDestroyed(ServletContextEvent e) { 
... 
} 
} 
+0

监听Web应用程序的初始化并不意味着您的Portlet已成功部署。试想一下,在您的Web应用程序之后,Liferay的Web应用程序将被初始化。在这种情况下,您将无法访问侦听器中的任何Liferay或portlet特定功能。 –

+0

恕我直言,问题是不要在这里访问任何portlet特定的功能。所以初始化的顺序并不重要,这个解决方案适合于当portlet正在部署时要求的问题 – Sumukh

+0

。即使他要求一个Web应用程序,我宁愿使用现代的@ WebListener代替。 –

相关问题