如何定义在liferay portlet中部署时运行的操作?

如何定义在liferay portlet中部署时运行的操作?,liferay,Liferay,我在liferay中开发了一个portlet,我有一个表(实体),我想在部署portlet时用数据填充它。 如何在部署操作期间调用类的方法?最后我解决了这个问题 我必须在src文件夹的某个地方创建我的action类 package com.example.portal.events; 导入java.util.array; 导入com.liferay.portal.kernel.events.SimpleAction; 公共类ExampleStartupAction扩展了SimpleAction{

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

最后我解决了这个问题

我必须在src文件夹的某个地方创建我的action类

package com.example.portal.events;
导入java.util.array;
导入com.liferay.portal.kernel.events.SimpleAction;
公共类ExampleStartupAction扩展了SimpleAction{
公共无效运行(字符串[]ID){
3.系统。输出。系统。输出。印刷LN。系统。系统。系统。输出。印刷LN(((35摩摩摩摩托托托托托托托托基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基基#######################“+ids.length+”+数组.toString(ids));
}
}
然后,您必须在WEB-INF中的src文件夹中创建一个名为portal.properties的文件,并将此行添加到其中:

application.startup.events=com.example.portal.events.ExampleStartupAction
最后,您必须编辑liferay-hook.xml文件并在上面添加此行:

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

方法run将在portlet的deply期间运行。

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

通过使用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>

请参阅,侦听web应用程序的初始化并不意味着成功部署了portlet。想象一下,Liferay的web应用程序是在web应用程序之后初始化的。在这种情况下,您将无法访问listener.IMHO中的任何Liferay或特定于portlet的功能,这里的问题是不能访问任何特定于portlet的功能。因此,初始化的顺序并不重要,这个解决方案符合他在部署portlet时提出的问题。即使他要一个web应用程序,我还是更喜欢现代的
@WebListener
   import javax.servlet.*;
    import javax.servlet.http.*;

    public class MyListenerClass implements ServletContextListener {

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

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