Liferay Portlet Struts操作路径挂钩错误

Liferay Portlet Struts操作路径挂钩错误,liferay,liferay-6,Liferay,Liferay 6,我试图覆盖“/blogs/view\u 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-acti

我试图覆盖“/blogs/view\u 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>
以下是被覆盖的方法:

@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);
    }
我已尝试为originalStrutsPortletAction传递null,如上的一个示例所示,但输出没有变化


非常感谢您在这方面提供的任何帮助。

我想您应该扩展
BaseStrutsPortletAction
(您的代码片段中没有说明)

BaseStrutsPortletAction
的默认方法不会委托给
originalStrutsPortletAction
——但它们会委托给类中没有
originalStrutsPortletAction
的方法,这些方法默认为空

因此,您必须自己调用
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);
}

@Tobias我做的和上面一样,但是在调用processAction(..)的行上出现了一个异常,声明“Set render parameter已经被调用了”。我正在做的就是在这一行之前调用actionResponse.setWindowsState(WindowState.NORMAL);你能帮个忙吗?你能为这个问题提出一个新问题吗?您还应该包括stracktrace,因为在其他方面很难帮助您。
@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);
}