ログに「processActionメソッドが実装されていません」エラーが表示される

問題

  • processAction method not implemented エラーがサーバーログに多数発生します:
ERROR [http-nio-8080-exec-1][PortletServlet:117] null

javax.portlet.PortletException: javax.portlet.PortletException: processAction method not implemented

at com.liferay.portal.kernel.portlet.LiferayPortlet.callActionMethod(LiferayPortlet.java:192) ~[portal-kernel.jar:?]

at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.callActionMethod(MVCPortlet.java:439) ~[portal-kernel.jar:?]

at com.liferay.portal.kernel.portlet.LiferayPortlet.processAction(LiferayPortlet.java:82) ~[portal-kernel.jar:?]

at com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet.processAction(MVCPortlet.java:256) ~[portal-kernel.jar:?]

...

Caused by: javax.portlet.PortletException: processAction method not implemented

at javax.portlet.GenericPortlet.processAction(GenericPortlet.java:223) ~[portlet.jar:3.0.1]

at com.liferay.portal.kernel.portlet.LiferayPortlet.callActionMethod(LiferayPortlet.java:187) ~[portal-kernel.jar:?]

... 191 more

Environment

  • Liferay DXP 7.1以降。

解決策

  • 原因としては、urlで使用されているアクション名が宣言されていない、または異なる名前であることが考えられます。
  • 例えば、こう定義すると:
    @ProcessAction(name="submitMyAction")
    ...
    submitMyActionURLで同じ名前を宣言する必要があります。
  • 他の例として、MVCActionCommandの中で、 mvc.command.nameというプロパティを指定した場合です:
    @Component(
    immediate = true,
    property = {
    "javax.portlet.name=" + JournalPortletKeys.JOURNAL,
    "mvc.command.name=/journal/add_folder"
    },
    service = MVCActionCommand.class
    )
    public class AddFolderMVCActionCommand extends BaseMVCActionCommand {

    @Override
    protected void doProcessAction(
    ActionRequest actionRequest, ActionResponse actionResponse)
    throws Exception {

    ...

    }

    ...

    }

    このプロパティの値は、URLパラメータMyPortlet_javax.portlet.actionと同じである必要があります。

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