Liferay Portlet Struts 动作路径挂钩错误

Liferay Portlet Struts action path hook error

我正在尝试覆盖“/blogs/view_entry”struts 路径。以下是liferay中的入口-hook.xml

<struts-action>
        <struts-action-path>/blogs/view_entry</struts-action-path>
        <struts-action-impl>com.smb.hook.action.BlogCustomEditAction</struts-action-impl>
</struts-action>

每当我点击博客 portlet 中的任何博客条目时,它都会重定向到

http://localhost:8080/web/guest/home/-/blogs/test-blog-for-testing?_33_redirect=http%3A%2F%2Flocalhost%3A8080%2Fweb%2Fguest%2Fhome%3Fp_p_id%3D33%26p_p_lifecycle%3D0%26p_p_state%3Dnormal%26p_p_mode%3Dview%26p_p_col_id%3Dcolumn-2%26p_p_col_count%3D2

并且博客 portlet 变得不可见。

在控制台,我可以看到渲染方法中添加了测试打印语句。在记录以下错误消息之后:

ERROR [RuntimePageImpl-22][PortletRequestProcessor:466] Forward does not exist

以下是重写的方法:

@Override
    public void processAction(StrutsPortletAction originalStrutsPortletAction,
            PortletConfig portletConfig, ActionRequest actionRequest,
            ActionResponse actionResponse) throws Exception {
        System.out.println("processAction :");
        super.processAction(originalStrutsPortletAction, portletConfig, actionRequest,
                actionResponse);
    }

    @Override
    public String render(StrutsPortletAction originalStrutsPortletAction,
            PortletConfig portletConfig, RenderRequest renderRequest,
            RenderResponse renderResponse) throws Exception {
        System.out.println("render :");
        return super.render(originalStrutsPortletAction, portletConfig, renderRequest,
                renderResponse);
    }

    @Override
    public void serveResource(StrutsPortletAction originalStrutsPortletAction,
            PortletConfig portletConfig, ResourceRequest resourceRequest,
            ResourceResponse resourceResponse) throws Exception {
        System.out.println("serveResource :");
        super.serveResource(originalStrutsPortletAction, portletConfig,
                resourceRequest, resourceResponse);
    }

我已尝试将 null 传递给 originalStrutsPortletAction,如 liferay dev site 上的示例之一所示,但输出没有变化。

如有任何帮助,我们将不胜感激。

我猜你扩展了 BaseStrutsPortletAction(你的代码段中没有说明)。

BaseStrutsPortletAction 的默认方法 委托给 originalStrutsPortletAction - 但它们委托给 class 的方法而不 class =13=],默认为空。

所以你必须自己打电话给originalStrutsPortletAction:

@Override
public void processAction(StrutsPortletAction originalStrutsPortletAction,
        PortletConfig portletConfig, ActionRequest actionRequest,
        ActionResponse actionResponse) throws Exception {
    originalStrutsPortletAction.processAction(portletConfig, actionRequest, actionResponse);
}

@Override
public String render(StrutsPortletAction originalStrutsPortletAction,
        PortletConfig portletConfig, RenderRequest renderRequest,
        RenderResponse renderResponse) throws Exception {
    return originalStrutsPortletAction.render(portletConfig, renderRequest, renderResponse);
}

@Override
public void serveResource(StrutsPortletAction originalStrutsPortletAction,
        PortletConfig portletConfig, ResourceRequest resourceRequest,
        ResourceResponse resourceResponse) throws Exception {
    originalStrutsPortletAction.serveResource(portletConfig, resourceRequest, resourceResponse);
}