この記事では、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を使用している開発者は、このプロパティが最新リリースのプロジェクトテンプレートにすでに含まれていることに気づくでしょう。