1

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

4

2 回答 2

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

于 2013-02-27T09:28:28.603 回答
-1

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

delete FROM servicecomponent where buildNamespace="<your table namespace>"
于 2013-12-17T12:18:25.083 回答