【问题标题】:Auto populate table after portlet is deployed in liferay在 Liferay 中部署 portlet 后自动填充表
【发布时间】:2013-12-17 20:18:25
【问题描述】:

我需要一种方法来自动填充由部署在 liferay 中的 portlet 的服务构建器创建的表。我怎样才能做到这一点?我正在考虑一个启动挂钩,但我将无法访问特定 portlet 的服务。那么有没有办法通过 portlet 本身来填充它?

【问题讨论】:

    标签: database service liferay portlet populate


    【解决方案1】:

    如果您设法不使更改具有破坏性(例如,注意不要在每次启动时填充),您可以在 StartupAction(或启动挂钩)中进行。您可以将这个钩子添加到您的 portlet 项目中——这很好用。或者,您可以在 liferay-plugin-package.properties 中声明一个挂钩依赖于 portlet(反之亦然)——这将使服务可用。但是为了这个目的,我只是将所有东西都打包在一个 portlet 插件中。

    如果您可能在其中进行破坏性更改,升级操作将是更安全的选择:保证只运行一次。

    示例参见旧的 Sevencogs 示例(如果您需要指针,请告诉我,然后我会拿出它们)

    更新:要在 portlet 项目中包含这样的钩子,请添加具有以下内容的 WEB-INF/liferay-hook.xml(或使用 Liferay IDE 的向导将钩子添加到项目中)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.1.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_1_0.dtd">
    
    <hook>
        <portal-properties>portal.properties</portal-properties>
    </hook>
    

    另外,使用以下选项创建 WEB-INF/src/portal.properties

    application.startup.events=com.example.MyStartupAction
    

    当然,创建上述启动操作,扩展 com.liferay.portal.kernel.events.SimpleAction

    【讨论】:

    • 我在我的 portlet 中添加了一个 portlet.properties 文件并向其中添加了application.startup.events=com.‌​startup.StartupTest,并创建了扩展SimpleAction 的类,但它没有运行。我们不能在 portlet 中实现它吗?
    【解决方案2】:

    尝试从服务组件表中删除一个条目。并重新部署您的 portlet。

    delete FROM servicecomponent where buildNamespace="<your table namespace>"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2022-01-24
      • 2013-05-04
      • 2012-09-10
      • 2017-08-19
      相关资源
      最近更新 更多