この記事は、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は、ポートレットの名前を生成しますが、keysクラスのPORTLET_NAME定数で定義されたアンダースコア付きの名前と一致しませんでした。 そのため、MVCActionCommandsはトリガーされません。
javax.portlet.name が でない場合、MVCActionCommand(例:AddRecordMVCActionCommand)からアクションが呼び出されると、MVCPortletはGenericPortletのgetPortletName()メソッドを使用してしまい、この名前はPortlet containerでポスト処理されます。
解像度
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を使用している開発者は、このプロパティが最新リリースのプロジェクトテンプレートにすでに含まれていることに気づくでしょう。