我在Tomcat服务器上安装了Liferay 6服务器。
事情是,我正在编辑我的一个公共页面(欢迎版),因此从管理控制台读取JavaScript。它只是将脚本放在页面的末尾,无论你想要什么。这很好用,我可以在页面的角落看一个弹出窗口(典型的弹出窗口,用于对页面发表意见)。
现在弹出窗口已经准备就绪,我需要一个servlet来发送来自其处方集的请求,但我不知道如何在Liferay Server中创建一个简单的Java servlet。
我想我必须独立创建它,并将其部署到Tomcat中,不是吗?但是,我该如何部署它,以及如何设置钩子以便它不会与Liferay的环境发生冲突?
谢谢!
答案 0 :(得分:1)
你必须使用Liferay的PortalDelegateServlet
包裹你的servlet - 见Usage of PortalDelegateServlet in Liferay
答案 1 :(得分:0)
我从未尝试过这样的事情,但this answer似乎是一种逻辑上正确的方法,但这并不是Liferay处理这种情况的方法。
这将是使用Struts Action Hooks创建一个可在整个门户网站中全局访问的新操作。
此类型的Hook可用于覆盖核心门户(例如c/portal/login
)和portlet struts操作(例如/login/forgot_password
),Liferay Portal的此操作在struts-config.xml
文件中指定在其WEB-INF
文件夹中。要覆盖操作:
liferay-hook.xml
下的hook插件的docroot/WEB-INF
文件中,在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>