Struts Action Hooks
這種型別的 Hook 可用於覆蓋核心門戶(例如 c/portal/login
)和 portlet struts 動作(例如/login/forgot_password
),Liferay Portal 的此操作在 struts-config.xml
資料夾中的 struts-config.xml
檔案中指定。要覆蓋動作:
- 在
docroot/WEB-INF
下你的 hook 外掛的liferay-hook.xml
檔案中,在 hook 元素中新增一個struts-action
元素。 - 在
struts-action
元素中,新增struts-action-path
,指定你要覆蓋的動作路徑和struts-action-impl
,它指定你的自定義動作類。這看起來像:
<struts-action-path>/login/login</struts-action-path>
<struts-action-impl>
com.myhook.action.ExampleStrutsPortletAction
</struts-action-impl>
</struts-action>
- 建立一個擴充套件
BaseStrutsPortletAction
的 Struts portlet 動作類。這個類的一個例子是:
public class ExampleStrutsPortletAction extends BaseStrutsPortletAction {
public void processAction(StrutsPortletAction originalStrutsPortletAction,
PortletConfig portletConfig, ActionRequest actionRequest,
ActionResponse actionResponse) throws Exception {
System.out.println("Custom Struts Action");
originalStrutsPortletAction.processAction(originalStrutsPortletAction,
portletConfig, actionRequest, actionResponse);
}
public String render(StrutsPortletAction originalStrutsPortletAction,
PortletConfig portletConfig, RenderRequest renderRequest,
RenderResponse renderResponse) throws Exception {
System.out.println("Custom Struts Action");
return originalStrutsPortletAction.render(null, portletConfig,
renderRequest, renderResponse);
}
}
呼叫被覆蓋的方法,如 originalStrutsPortletAction.processAction
,並不是強制性的,而是保持 Action 的行為不受 Liferay Portal 影響的最佳實踐。這種型別的鉤子也可用於新增新的 Struts 動作,它與修改現有動作相同,在這種情況下 liferay-hook.xml
將是:
<struts-action>
<struts-action-path>/my/custom/path</struts-action-path>
<struts-action-impl>
com.myhook.action.ExampleStrutsAction
</struts-action-impl>
</struts-action>