MVCActionCommands と portletIds の変更点

この記事では、Liferay DXP 7.0 Fix Pack 11がデプロイされた後の MVCActionCommand タイプのコマンドの変更点について説明します。 この変更は、Liferay IDEツール(Liferay Developer StudioやLiferay Bladeなど)でポートレットを構築している開発者に最も影響を与えます。

Fix Pack 11以前は、開発者は javax.portlet.nameを宣言する必要がありませんでした。MVCActionコマンドでは必要ありませんでしたが、Liferay DXP 7.0で生成されたportletIdだけは必要でした。

Fix Pack 11 がデプロイされると、MVCAction コマンドが動作しなくなることが判明しました。 根拠はポータルの変更でした。 Liferay DXP 7.0では、キー・クラスのPORTLET_NAME定数で定義されているアンダースコア付きの名前と一致しないポートレットの名前が生成されました。 そのため、MVCActionCommandsはトリガされません。

の場合、javax.portlet.nameではなく である場合、MVCPortlet で定義されている MVCActionCommands からアクションが呼び出されたときの結果です (例えば。MVCPortlet は、GenericPortlet の getPortletName() メソッドを使用して終了し、この名前はポートレット コンテナによってポスト処理されます。

決議

Fix Pack 11以降、Liferay DXP 7.0の各ポートレットクラスには、デフォルトで javax.portlet.name が追加されています。 ソースのから以下のテンプレートを参照してください。

package ${package}.portlet;

import ${package}.constants.${className}PortletKeys;

import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;

import javax.portlet.Portlet;

import org.osgi.service.component.annotations.Component;

/**
 * @author ${author}
 */
@Component(
	immediate = true,
	property = {
		"com.liferay.portlet.display-category=category.sample",
		"com.liferay.portlet.instanceable=true",
		"javax.portlet.display-name=${artifactId} Portlet",
		"javax.portlet.init-param.template-path=/",
		"javax.portlet.init-param.view-template=/view.jsp",
		"javax.portlet.name="classNamePortletKeysclassName"javax.portlet.resource-bundle=content.Language",
		"javax.portlet.security-role-ref=power-user,user"
	},
	service = Portlet.class
)
public class ${className}Portlet extends MVCPortlet {
}


Liferay Blade CLI ツールを使用している開発者は、このプロパティがプロジェクト・テンプレートに含まれていないため、このプロパティをすべてのポートレットに手動で追加する必要があります。 カスタムポートレットに追加すると、 MVCActionCommands がポートレットにバインドされないという問題が解決されます。 次のリリースでは、すべてのプロジェクトテンプレートに javax.portlet.name を含めることで、この問題を解決します。

Liferay Developer Studioを使用している開発者は、このプロパティが最新リリースのプロジェクトテンプレートにすでに含まれていることに気づくでしょう。

追加情報

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています