MVCActionCommandsおよびportletIdsの変更

この記事では、Liferay DXP 7.0フィックスパック11が展開された後の MVCActionCommand タイプのコマンドの変更について説明します。 この変更 は、開発者に最も影響を及ぼしますLiferay IDEツール(たとえば、Liferay Developer StudioまたはLiferay Blade)でポートレットを構築します。

フィックスパック11以前は、開発者はjavax.portlet.nameを宣言する必要がありませんでした。 MVCActionコマンドでは必要ありませんでしたが、Liferay DXP 7.0でのみ生成されたportletIdです。

フィックスパック11がデプロイされると、MVCActionコマンドが機能しなくなったことが発見されました。 根拠は、ポータルの変更でした。 Liferay DXP 7.0は、キークラスのPORTLET_NAME定数で定義されている下線付きの名前と一致しないポートレットの名前を生成しました。 したがって、MVCActionCommandsはトリガーされません。

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

解決

フィックスパック11以降、デフォルトでLiferay DXP 7.0の各ポートレットクラスに javax.portlet.name が追加されました。 source次のテンプレートを参照してください。

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人がこの記事が役に立ったと言っています